0

我看到了一个主函数的 gdb 反汇编输出,它没有做任何特别的事情,它看起来像这样:

1  push    %rbp
2  mov     %rsp, %rbp
3  sub     $0x10,%rsp
4  movl    $0x0, -0x8(%rbp)    ;
5  mov     -0x8(%rbp), %eax    ;
6  mov     %eax, -0x4(%rbp)    ;
7  mov     -0x4(%rbp), %eax    ;
8  add     $0x10, %rsp
9  pop     %rbp
10 retq

我不是 Mac 用户,但我很好奇,从 4 到 7 的行到底在做什么?.不应该是这样的:

push    %rbp
mov     %rsp, %rbp
sub     $0x10, %rsp
xor     %eax, %eax
add     $0x10, %rsp
pop     %rbp
retq

注意:请随时改进问题标题,我找不到更好的。

4

1 回答 1

0

从这个汇编代码的外观来看,看起来你有一台 64 位机器。

 4  movl    $0x0, -0x8(%rbp)    ;
 5  mov     -0x8(%rbp), %eax    ;
 6  mov     %eax, -0x4(%rbp)    ;
 7  mov     -0x4(%rbp), %eax    ;

它们是正确的指示。此处的%rbp寄存器包含对Stack segment. 该符号-08x(%rbp)指的是内存位置,特别是堆栈指针的第 8 个索引。
那么第 4 - 5 行说:

4 put 0 in the 8th index of the stack segment
5 put the value of the 8th index of the stack segment in %eax

第 6 - 7 行也是如此。
如果我没记错的话,初始程序仅由分配组成...

于 2012-07-06T22:55:12.367 回答