我正在尝试遵循 Mac OS X Monttain Lion 上的 Professional Asssembly Language 一书。在谷歌上,我在以下网址找到了 Mac OS X 的端口:MacOS X 上的组装
使用 Vim 创建文件并使用 GAS 编译: as -g -arch i386 -o cpuid.o cpuid.s 使用 gcc 链接代码: gcc -m32 -arch i386 -o cpuid cpuid.o
生成的可执行 cpuid 运行没有错误,但如果我尝试在最后使用 gdb 调试它,它会显示 Program exited with code 044 而不是 Program exited normal.
试图找到一种让它正确退出的方法我在 C 中创建了一个 hello world 示例并生成了汇编代码: gcc -Wall -03 -m32 -fno-PIC hello_pf.c -S -o hello_pf.s 结果汇编代码如下:
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main:
pushl %ebp
movl %esp, %ebp
subl $24, %esp
leal L_.str, %eax
movl %eax, (%esp)
call _puts
movl $0, -8(%ebp)
movl -8(%ebp), %eax
movl %eax, -4(%ebp)
movl -4(%ebp), %eax
addl $24, %esp
popl %ebp
ret
.section __TEXT,__cstring,cstring_literals
L_.str:
.asciz "Hello world!\n"
.subsections_via_symbols
- 有人可以就这个问题提供任何帮助吗?
- 如何使用 IA-32 mac ox s 程序集从上面提供的链接制作 cpuid 的工作版本?
- 我在哪里可以找到有关 Mac OS X 中堆栈对齐问题的详细说明?我已经阅读了 Apple 网站上的内容,但对于初学者来说并不是很有帮助。
- 上述示例代码中调用 _puts 后的指令是什么?
- 从程序集中调用 libc 函数如何真正起作用?关于这个主题的任何好的详细文章?
谢谢!