【发布时间】:2019-11-30 13:51:45
【问题描述】:
这是我的示例 c 代码
user@linux:~$ gdb -q hello
Reading symbols from hello...done.
(gdb)
(gdb) list
1 #include<stdio.h>
2
3 int main()
4 {
5 printf("Hello World!\n");
6 return 0;
7 }
8
这是它的汇编代码。
(gdb) disassemble main
Dump of assembler code for function main:
0x000000000000063a <+0>: push %rbp
0x000000000000063b <+1>: mov %rsp,%rbp
0x000000000000063e <+4>: lea 0x9f(%rip),%rdi # 0x6e4
0x0000000000000645 <+11>: callq 0x510 <puts@plt>
0x000000000000064a <+16>: mov $0x0,%eax
0x000000000000064f <+21>: pop %rbp
0x0000000000000650 <+22>: retq
End of assembler dump.
(gdb)
内存地址包含18个字符,大部分是数字0。
不显示所有数字,是否可以简化它?
让我们说0x63a 而不是0x000000000000063a
【问题讨论】:
-
也许这会有所帮助。 ftp.gnu.org/old-gnu/Manuals/gdb/html_chapter/gdb_9.html#SEC56n,重复次数重复次数为十进制整数;默认值为 1。它指定要显示的内存量(以 u 为单位计数)。或者可能在这里:sourceware.org/gdb/onlinedocs/gdb/Print-Settings.html
-
0x000000000000063a有 16 个十六进制数字 = 8 个字节。0x只是“装饰”,告诉你它是一个十六进制数字。