Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cfi对我来说不清楚 更新:_C_Gcc_Assembly_X86 64 - Fatal编程技术网

cfi对我来说不清楚 更新:

cfi对我来说不清楚 更新:,c,gcc,assembly,x86-64,C,Gcc,Assembly,X86 64,我可以在那里找到部分答案: 第58页。 Pffeeew汇编是一种很难的语言:) 背景: 现在学习气体组装2-3天。 Linux 64位 通用条款4.8.2 编译时不进行优化(-O0-march=native),以查看生成的基本程序集 问题: 我下面的解释正确吗? 我所有的C转换代码都是用相同的方法编写的 .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_de

我可以在那里找到部分答案:

第58页。 Pffeeew汇编是一种很难的语言:)

背景: 现在学习气体组装2-3天。 Linux 64位

通用条款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
我试图解释以下步骤:

(一)

我读到,
cfi_def_cfa_偏移量
必须是64位的16。这是一条规则(对吗?

(二)

cfi_偏移量
cfi_def_cfa_寄存器
与值6“关联”为什么??

(三)

我知道我们用
subq
跳过cfi_def_cfa_偏移量16字节

(四)

但是为什么
cfi_def_cfa 7,8
最终会出现呢?
我觉得没有意义,因为8在哪里都没有出现。顺便问一下,为什么不
cfi_def_cfa 15,16


谢谢

我相信
6
rbp
的注册号,
7
rsp
。如果您自己编写程序集,可以使用寄存器名,例如
%rbp
,而不是
6
。干得好,JS1,多亏了您的指点,我可以得到我的答案。我将相应地更新问题+1.顺便说一句,如果你能给出一个答案,那就多找一些代表:)一般来说,在编写汇编程序时,你不必费心于
cfi
指令,除非你想要非常好的调试。谢谢Jester,这是我要知道的一点;)