2012-10-16 74 views
1

GDB採用什麼方法來確定函數的長度?我注意到,在我從main()GDB中移除兩個字節後,我相信該函數仍然是原始長度,所以我假設它使用了一些調試信息?GDB如何知道函數的長度?

特別地,main()的末尾原是:

0x00000000004005a1 <+133>: mov edi,0x4006ac 
0x00000000004005a6 <+138>: call 0x4003a0 <[email protected]> 
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」沒有參數。

回答

7

GDB採用什麼方法來確定函數的長度?

它看起來在ELF符號表(.st_size成員)。你可以用readelf -s a.out | grep main