2013-02-15 46 views
0

我是新來的二進制和彙編程序,我很好奇如何直接編輯二進制可執行文件。我嘗試從二進制文件中刪除指令(根據objdump提供的反彙編指令),但在執行該操作後,「可執行文件」似乎不再是可執行格式(運行時出現分段錯誤; gdb無法識別)。我聽說這是由於指令對齊問題。 (是嗎?)如何在不破壞對齊的情況下在linux可執行文件中添加/刪除x86指令

那麼,是否可以直接在linux可執行文件中添加/刪除單個x86指令?如果是這樣,怎麼樣?提前致謝。

+0

你爲什麼要問?爲什麼不能改變彙編器或可重定位對象的'.o'文件呢? – 2013-02-16 08:23:59

+0

@BasileStarynkevitch爲什麼我不能問?對你來說不感興趣的東西可能會吸引其他人。而且,沒有什麼東西總是無用的。 – 4ae1e1 2013-02-16 20:14:37

+0

如果我們明白你真正想要做什麼(即你要問的原因),我們可以建議更好或更簡單的解決方案。我發現在Linux上更改ELF可執行文件的原因很少(特別是如果它們是免費軟件,更改源代碼更容易)。 – 2013-02-16 20:33:08

回答

2

如果您刪除了一大塊二進制文件而沒有相應地調整文件標頭,它將會失效。

幸運的是,您可以用NOP取代指示而不實際刪除它們。文件大小保持不變,如果沒有校驗和或簽名(或者如果沒有真正檢查),則沒有其他要做的事情。

有插入的指令沒有普遍的方式,但一般你覆蓋了JMP原代碼到另一個位置,在那裏你重現一下原來的代碼沒有,做自己的事情,你想要的,然後JMP回來。在不改變二進制文件的大小的情況下尋找新代碼的空間可能是不可能的,所以我會在加載可執行文件後修補代碼(可能使用特殊的庫)。

1

是的。如果指令跨越多個字節,只需用NOP指令(0x90)替換它即可。這是一個古老的伎倆。

相關問題