我一直在尝试熟悉 mac 上的汇编,据我所知,文档非常稀少,而且大多数关于该主题的书籍都是针对 windows 或 linux 的。我以为我可以很容易地从 linux 翻译到 mac,但是这个(linux)
.file "simple.c"
.text
.globl simple
.type simple, @function
simple:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx
movl 12(%ebp), %eax
addl (%edx), %eax
movl %eax, (%edx)
popl %ebp
ret
.size simple, .-simple
.ident "GCC: (Ubuntu 4.3.2-1ubuntu11) 4.3.2"
.section .note.GNU-stack,"",@progbits
似乎与此(mac)有很大不同
.section __TEXT,__text,regular,pure_instructions
.globl _simple
.align 4, 0x90
_simple: ## @simple
.cfi_startproc
## BB#0:
pushq %rbp
Ltmp2:
.cfi_def_cfa_offset 16
Ltmp3:
.cfi_offset %rbp, -16
movq %rsp, %rbp
Ltmp4:
.cfi_def_cfa_register %rbp
addl (%rdi), %esi
movl %esi, (%rdi)
movl %esi, %eax
popq %rbp
ret
.cfi_endproc
.subsections_via_symbols
“正常”(因为没有更好的词)指令和寄存器,比如pushq %rbp
别担心。但是机器指令中间的那些“奇怪”的东西.cfi_startproc
没有Ltmp2:
任何意义。
我不知道去哪里找出这些是什么以及它们的含义。几个月来,我一直在努力为初学者寻找一个好的资源,所以我要拔掉头发了。有什么建议么?