GCC如何在Mac上运行汇编程序?

3

我试图在我的Mac终端上运行以下代码:

.section, .data

format_string:
   .asciz "My favorite number is %d!"

number:
  .long 786

.section, .text
.globl main

main:
  pushl number
 pushl $format_string  
 call printf 
  addl $8, %esp

  pushl $0
  call exit

这段代码在一个名为favorite.s的文件中。

我使用了命令"gcc favorite.s -m32",并看到以下信息:

Undefined symbols for architecture i386:
  "_main", referenced from:
      start in crt1.10.6.o
  "exit", referenced from:
      main in ccUKdD8O.o
  "printf", referenced from:
      main in ccUKdD8O.o
ld: symbol(s) not found for architecture i386
collect2: ld returned 1 exit status

我在这里做错了什么?谢谢。
1个回答

5
在Mac OS X上,符号前面会加一个下划线。在您的程序中,在mainexitprintf 前面添加_,然后再试一次!

添加后,现在我得到了一个输出,上面写着“非法指令:4”:/ - zProgrammer
听起来像是某处的打字错误。你能展示一下你更新后的代码吗? - Carl Norum
我尝试了一个更简单的程序,它产生了相同的消息:.section, .text .globl _main _main:

传递一个参数以退出。

pushl $27 call _exit
- zProgrammer
等一下 - 在编译时还是运行时?你遇到了这个问题吗:https://dev59.com/2eo6XIcBkEYKwwoYQiO7? - Carl Norum
它可以编译。当我执行./a.out时会出现这个消息。我尝试在执行gcc favorite.s -m32时添加了-mmacosx-version-min=10.6,但是它没有改变任何东西。 - zProgrammer
反汇编是否与您的源代码匹配?在调试器中逐步执行时会发生什么?恐怕我手头没有电脑,所以无法在这里为您测试。 - Carl Norum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接