我目前在进行GDB反汇编工作,以帮助我更详细地了解C程序。因此我编写了一个C程序:
我使用 gdb 并运行
我的问题是这些
#include <stdio.h>
void swap(int a, int b){
int temp = a;
a = b;
b = temp;
}
void main(){
int a = 1,b = 2;
swap(a, b);
}
我使用 gdb 并运行
disass /m main
命令得到以下内容:(gdb) disass /m main
Dump of assembler code for function main:
8 void main(){
0x0000000000400492 <+0>: push %rbp
0x0000000000400493 <+1>: mov %rsp,%rbp
0x0000000000400496 <+4>: sub $0x10,%rsp
9 int a = 1,b = 2;
0x000000000040049a <+8>: movl $0x1,-0x8(%rbp)
0x00000000004004a1 <+15>: movl $0x2,-0x4(%rbp)
10 swap(a, b);
0x00000000004004a8 <+22>: mov -0x4(%rbp),%edx
0x00000000004004ab <+25>: mov -0x8(%rbp),%eax
0x00000000004004ae <+28>: mov %edx,%esi
0x00000000004004b0 <+30>: mov %eax,%edi
0x00000000004004b2 <+32>: callq 0x400474 <swap>
11 }
0x00000000004004b7 <+37>: leaveq
0x00000000004004b8 <+38>: retq
End of assembler dump.
我的问题是这些-0x8(%rbp)
是什么意思?
是内存还是寄存器?
我知道1存储在-0x8(%rbp)
中,2存储在-0x4(%rbp)
中,如何显示这些“位置”的值?
我尝试使用(gdb) p -0x8(%rbp)
但得到了这个:
A syntax error in expression, near `%rbp)'.
void swap(int *a, int *b)
吗?否则,调用者无法反映出变化。 - Aki SuihkonenGDB
使用Intel的语法。set disassembly-flavor intel
- edmz