2010-04-03 93 views
2

出於對逆向工程的好奇心,我正在考慮編寫一個簡單的程序(使用C++),它將可執行文件作爲輸入並生成所有功能的名稱該可執行文件的源程序。爲nm-like命令編寫代碼[C++]

任何關於我應該如何去處理的指針?

一步一步的方法將不勝感激!

編輯:
平臺Linux和我關心a.out格式的可執行文件。

+1

爲什麼不簡單看一下nm命令的來源? – 2010-04-03 10:35:20

+0

Hi Niel !,我可能在哪裏尋找nm-command的源代碼..我試着用Google搜索它..也許任何人都可以指示我 – sud03r 2010-04-03 10:41:11

+0

應該是任何Linux發行版的源代碼的一部分。 – 2010-04-03 10:43:59

回答

3

嚴重依賴於您的平臺和您正在檢查的代碼的來源。如果您想從中獲取函數名稱,則需要一個符號表來表示您正在反轉的二進制文件。有時候這個表被嵌入到二進制文件中(比如DLL中的導出查詢表),但很多時候這些信息根本不存在。

有沒有這個通用的解決方案。您至少需要將問題縮小到特定的平臺,最好是特定的目標二進制類型。

編輯:好吧,你已經給出的規格,我猜測那你可能實際上關心的是ELF二進制文件,而不是舊的a.out格式,這是相當罕見的。 「a.out」仍然是GCC鏈接器的默認輸出名稱,但實際的a.out二進制格式在Linux中很長時間還沒有被廣泛使用。

在網上有一些ELF structure的好演練,一些快速搜索也出現了ready-made example of reading the ELF .symtab

希望這會有所幫助。

+0

根據需要進行編輯! – sud03r 2010-04-03 10:44:04

0

幾乎不可能。這類數據不包含在絕大多數可執行文件中。也許是DLL。

+0

取決於他們是否已被剝離 - 我猜他們絕大多數會如你所說的那樣。 – 2010-04-03 10:51:26

+0

反正OP在這裏不感興趣。 – Puppy 2010-04-03 23:17:46