我this看了這麼回答靜態鏈接庫:如何確定代碼是否在可執行文件的連續區域?
當靜態文件鏈接到一個可執行文件,該文件的內容都包含在鏈接時。換句話說,文件的內容被物理地插入到您要運行的可執行文件中。
我想知道在一般情況下,這段代碼是否在連續區域。我從another學到了回答,這可能並不總是如此:
這種假設是在簡單的情況可能是真實的,但絕不是保證。
說我有一個剝離的二進制文件,沒有源代碼。但我知道可執行文件是使用某個靜態鏈接的庫構建的。
- 是否有可能找出靜態鏈接庫中的代碼是否在可執行文件的連續區域?如果在一般情況下不可能,是否有啓發式或指標?
- 爲什麼鏈接器將庫的代碼放在可執行文件的不同位置?我猜這些會是罕見的邊緣情況,對吧?
您的問題中的第二個鏈接似乎回答第二個問題(爲什麼鏈接器將重新排序代碼?)。一般來說,如果你問這個問題,它會提高效率;通常,您需要提供鏈接器的分析信息才能執行此優化。查看'-freorder-functions'的'gcc'文檔 – rici