我可以在那里得到部分答案: http://www.x86-64.org/documentation/abi.pdf
第58页。 Pffeeeew汇编是一种强硬的语言:)
现在学习GAS装配2-3天。 Linux 64位。
GCC 4.8.2
使用无优化(-O0 -march = native)进行编译,以查看生成的基本程序集。
我的解释(下方)是对吗?
我的所有C转换代码都以与
相同的方式组成.cfi_startproc
pushq %rbp
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp
.cfi_def_cfa_register 6
subq $16, %rsp
#my code here
movl $0, %eax
leave
.cfi_def_cfa 7, 8
ret
.cfi_endproc
我试着解释一下步骤:
1)
我读到cfi_def_cfa_offset
的在64位arch上为16。这是一条规则(对吗?)。
2)
cfi_offset
和cfi_def_cfa_register
与值6“关联”。为什么?
3)
据我所知,我们使用subq
跳过了cfi_def_cfa_offset 16个字节。
4)
但是为什么cfi_def_cfa 7, 8
到底?它对我没有意义,因为8无处可去。顺便说一句,为什么不cfi_def_cfa 15, 16
?
由于