私は 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:
、機械命令の真ん中にあるものは意味がありません。
これらが何であり、何を意味するのかを知るためにどこに行けばよいかわかりません。何ヶ月もの間、初心者向けの良いリソースを見つけようとしてきたので、私は髪を引っ張ろうとしています. 助言がありますか?