gpt4 book ai didi

linux - GDB如何知道函数的长度?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:32 26 4
gpt4 key购买 nike

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

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

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”创建,不提供任何参数。

最佳答案

What approach does GDB take to determining the length of a function?

它在ELF 符号表(.st_size 成员)中查找。您可以使用 readelf -s a.out | 查看它grep 主

关于linux - GDB如何知道函数的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12917935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com