assembly 如何在M1 Mac(ARM)上编译x86_64 asm代码

5us2dqdw  于 7个月前  发布在  Mac
关注(0)|答案(1)|浏览(113)

我在大学里有一门编译器课程,作为课程的一部分,我们在一个纳米通道编译器上工作,并创建通道。

gcc -g -std=c99 runtime.o tests/var_test_1.s

字符串
runtime.o是runtime.c文件的编译。
我得到一个错误:

tests/var_test_1.s:3:12: error: unknown token in expression
 movq $42, %rax
           ^
tests/var_test_1.s:3:12: error: invalid operand
 movq $42, %rax
           ^
tests/var_test_1.s:4:2: error: unrecognized instruction mnemonic, did you mean: cmp?
 jmp _conclusion
 ^
tests/var_test_1.s:9:8: error: unknown token in expression
 pushq %rbp
       ^
tests/var_test_1.s:9:8: error: invalid operand
 pushq %rbp
       ^
tests/var_test_1.s:10:7: error: unknown token in expression
 movq %rsp, %rbp
      ^
tests/var_test_1.s:10:7: error: invalid operand
 movq %rsp, %rbp
      ^
tests/var_test_1.s:11:11: error: unknown token in expression
 subq $0, %rsp
          ^
tests/var_test_1.s:11:11: error: invalid operand
 subq $0, %rsp
          ^
tests/var_test_1.s:12:2: error: unrecognized instruction mnemonic, did you mean: cmp?
 jmp _start
 ^
tests/var_test_1.s:16:11: error: unknown token in expression
 addq $0, %rsp
          ^
tests/var_test_1.s:16:11: error: invalid operand
 addq $0, %rsp
          ^
tests/var_test_1.s:17:7: error: unknown token in expression
 popq %rbp
      ^
tests/var_test_1.s:17:7: error: invalid operand
 popq %rbp
      ^
tests/var_test_1.s:18:2: error: unrecognized instruction mnemonic, did you mean: eret, ret?
 retq
 ^


在进一步的阅读中,我发现这是因为M1 Mac由于是ARM架构而不能直接编译x86_64 asm代码。是否有任何标志或任何版本的gcc可以用来编译ARM架构上的x86代码?
我看过rosetta和qemu,但我不想为这样的任务运行vm。qemu-static似乎在M1上不那么简单。
以下是var_1_test.s的内容(此文件由仅支持x86的编译器生成[当然是根据性质])

.align 16
_start:
    movq    $42, %rax
    jmp _conclusion

    .globl _main
    .align 16
_main:
    pushq   %rbp
    movq    %rsp, %rbp
    subq    $0, %rsp
    jmp _start

    .align 16
_conclusion:
    addq    $0, %rsp
    popq    %rbp
    ret


如果需要任何进一步的细节,我将非常乐意提供。谢谢!

oiopk7p5

oiopk7p51#

因此,在挖掘了更多的Stack Overflow答案之后,感谢@ pawesthouse-kukasik,通过术语交叉编译器,我得到了关于如何运行x86代码的答案,或者实际上是使用Rosetta 2的x86架构中的任何命令。
How to run the Homebrew installer under Rosetta 2 on M1 Macbook
我对makefile进行了更改以添加arch -x86_64 ...
一切都很顺利

相关问题