【问题标题】:gdb how to simplify memory address/offset?gdb 如何简化内存地址/偏移量?
【发布时间】: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

【问题讨论】:

标签: c assembly gdb


【解决方案1】:

内存地址包含18个字符,大部分是数字0

这里没有“记忆”。您显然是在谈论显示地址。

假设是 0x63a 而不是 0x000000000000063a

您在 64 位系统上,每个地址完全是 64 位的。将地址显示为 64 位以外的数字会非常混乱。

附:您有一个与位置无关的可执行文件。它实际上并没有在地址0x000000000000063a 上运行。如果你使用startdisas main,你会得到一个非常不同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 2011-04-29
    • 2021-01-05
    • 2015-07-09
    • 2016-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多