我见过一个主函数的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
注意 :请随时改进问题标题,我找不到更好的标题。
答案 0 :(得分: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行也是如此 如果我没错,那么最初的程序只能由分配...