0

this看了這麼回答靜態鏈接庫:如何確定代碼是否在可執行文件的連續區域?

當靜態文件鏈接到一個可執行文件,該文件的內容都包含在鏈接時。換句話說,文件的內容被物理地插入到您要運行的可執行文件中。

我想知道在一般情況下,這段代碼是否在連續區域。我從another學到了回答,這可能並不總是如此:

這種假設是在簡單的情況可能是真實的,但絕不是保證。

說我有一個剝離的二進制文件,沒有源代碼。但我知道可執行文件是使用某個靜態鏈接的庫構建的。

  • 是否有可能找出靜態鏈接庫中的代碼是否在可執行文件的連續區域?如果在一般情況下不可能,是否有啓發式或指標?
  • 爲什麼鏈接器將庫的代碼放在可執行文件的不同位置?我猜這些會是罕見的邊緣情況,對吧?
+1

您的問題中的第二個鏈接似乎回答第二個問題(爲什麼鏈接器將重新排序代碼?)。一般來說,如果你問這個問題,它會提高效率;通常,您需要提供鏈接器的分析信息才能執行此優化。查看'-freorder-functions'的'gcc'文檔 – rici

回答

1

如果要分析可執行文件,可以使用反編譯和代碼查看工具。這裏的人可能會更好地幫助你:https://reverseengineering.stackexchange.com/

至於爲什麼它可能是一個優化,主要是爲了可執行文件的大小,移動這個區域或將其分割成方便大小的洞。另一個主要原因是防止跳到圖書館攻擊。基本上,內存執行保護可防止攻擊者將任意代碼寫入數據緩衝區並執行。作爲迴應,破解者有時會將攻擊從庫代碼中拼湊出來,因此庫的位置是隨機的。這不是你想要做的,對吧?

+0

謝謝你的回答。我知道爲什麼圖書館代碼可能不在連續的區域。至於第一個問題(如何確定它是否在連續區域中),我會嘗試提出有關reverseengineering.stackexchange.com的更精確的問題 – stackoverflowwww

相關問題