2013-04-02 23 views
1

我使用gcc生成了我的C/C++程序的調用圖,但該圖包含很多內置函數,例如strcmp,fprintf等,這些我都不感興趣。有沒有可以幫助省略這些功能的gcc選項?我知道埃及有一個選項--omit,但這需要用戶指定他們預先知道的功能列表。這意味着如果我想刪除上面所有的內置函數,我需要有一個完整的函數列表,我不知道從哪裏得到。如何從調用圖中省略內置函數

謝謝。

回答

1

標準庫函數的完整列表可以在語言標準中找到。但是,該列表不包括幫助器,編譯器特定的函數。

見,例如,C標準的Annex B/Library summary從1999年

如果你沒有標準的,上網的草稿。

0

您可以自己指定檢測功能。有關詳細信息,請參見this link。 實現入侵函數,讓你指定一個函數,在每次函數調用之前調用它,並且它將被傳遞被調用函數的地址和從中調用的地址。

之後,您可以使用addr2line工具來轉換插裝運行的地址。這可以讓你提取功能並讓你過濾它們。您需要解析文本文件並自行構建調用圖,但dot語言非常容易使用。

+0

謝謝@Morten Jensen。我正在考慮這個解決方案,但只是想知道是否有一個來自gcc的輕量級即用型解決方案。例如,一個gcc選項,如-fno-standard-funtions – user2197352

+0

@ user2197352是的,它真的是一個很遙遠的路要去得到你想要的:S .. GCC給你什麼樣的輸出? .dot文件還是? –

+0

是的,它是一個.dot文件。我知道我可以從.dot文件中「grep」和「刪除」與這些功能相關的記錄。但是,這也需要在原始文章中提到的預定義的黑名單功能。我只是認爲gcc可能有這種選擇。看來黑名單解決方案現在是唯一的選擇。 – user2197352