【问题标题】:How does GDB know the length of a function?GDB 如何知道函数的长度?
【发布时间】:2012-10-06 17:51:16
【问题描述】:

GDB 采用什么方法来确定函数的长度?我注意到在我从 main() 中删除两个字节后,GDB 认为该函数仍然是原始长度,所以我假设它正在使用一些调试信息?

特别是main()的结尾原来是:

0x00000000004005a1 <+133>:   mov    edi,0x4006ac
0x00000000004005a6 <+138>:   call   0x4003a0 <puts@plt>
0x00000000004005ab <+143>:   mov    eax,0x0
0x00000000004005b0 <+148>:   leave  
0x00000000004005b1 <+149>:   ret    

然后在我删除两个字节后(在程序列表的前面):

0x000000000040059f <+131>:   mov    edi,0x4006ac
0x00000000004005a4 <+136>:   call   0x40039e
0x00000000004005a9 <+141>:   mov    eax,0x0
0x00000000004005ae <+146>:   leave  
0x00000000004005af <+147>:   ret    
0x00000000004005b0 <+148>:   nop
0x00000000004005b1 <+149>:   nop

即GDB 认为总长度仍然相同。我想知道 GDB 是如何做到这一点的。

该文件为以下类型:a.out:ELF 64 位 LSB 可执行文件,x86-64,版本 1 (SYSV),动态链接(使用共享库),未剥离 简单地用“gcc”创建,没有参数。

【问题讨论】:

    标签: linux gdb elf


    【解决方案1】:

    GDB 采用什么方法来确定函数的长度?

    它在ELF 符号表(.st_size 成员)中查找。你可以通过readelf -s a.out | grep main看到它

    【讨论】:

      猜你喜欢
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 2013-08-24
      • 2019-11-11
      • 2017-06-20
      • 1970-01-01
      • 2023-04-01
      • 2018-08-08
      相关资源
      最近更新 更多