2011-02-25 18 views
1

我需要查找幾個C函數的確切字節大小。 任何能夠分析gcc編譯器生成的.obj文件的實用程序的建議?C:分析.obj文件的實用程序,以精確字節度量某些函數的大小?

+0

如果您找不到,可以通過簡單地註釋掉代碼並重新編譯來做「二元砍」,並對文件大小進行區分。 – 2011-02-25 04:27:15

+1

使用地圖文件。 – 2011-02-25 04:54:07

+1

@Merlyn:如果編譯器執行死代碼去除靜態函數和數據(大部分在優化模式下執行,並且在調試模式下測量任何內容都毫無意義),那麼這可能會影響其他各種依賴項。 – 2011-02-25 05:31:11

回答

4

我只有GCC v4在這裏進行測試,但我不認爲binutils的這個特殊功能最近已經改變。

test.c的:

int foo() 
{ 
    return 42; 
} 

編譯:

$ gcc -c test.c -o test.o 

拆解:

$ objdump -D test.o 
... 
0000000000000000 <foo>: 
    0: 55      push %rbp 
    1: 48 89 e5    mov %rsp,%rbp 
    4: b8 2a 00 00 00   mov $0x2a,%eax 
    9: c9      leaveq 
    a: c3      retq 
... 

(我們看到foo位於地址0,該尺寸是0x000b字節)

證明在布丁:

$ nm -S test.o 
0000000000000000 000000000000000b T foo 

在地址0,大小0x000b。你在這。 ;-)

但是,要小心你想用這些數字做什麼。這是所有功能的大小,但可能有更多(例如全局數據對象)使功能正確運行

+0

雖然內容豐富,但並不是我希望得到的確切答案......但無論如何都要感謝信息! – TCSGrad 2011-02-25 09:05:39

+0

@ shan23:恩,*你的問題*?我的回答講述了一個「能夠分析由gcc編譯器生成的.obj文件的實用程序」,告訴你「C函數的確切字節大小」。如果它不是你正在尋找的答案,你應該考慮重新指定你的問題。 – DevSolar 2011-02-25 09:25:45

+0

這是確切的答案;這不是你所希望的嗎?請澄清,因爲我不能根據當前的問題給出更好的答案。 – MSalters 2011-02-25 09:27:13

相關問題