是否有可能使用GNU工具(gcc,binutils等)將所有出現的彙編指令修改爲無操作?具體來說,GCC使用-pg選項生成以下組件(ARM):試圖禁止一條指令
0x0: e1a0c00d mov ip, sp
0x4: e92dd800 stmdb sp!, {fp, ip, lr, pc}
0x8: e24cb004 sub fp, ip, #4 ; 0x4
0xc: ebfffffe bl 0 <mcount>
我想記錄下這最後一條指令的地址,然後在下面的代碼
0x0: e1a0c00d mov ip, sp
0x4: e92dd800 stmdb sp!, {fp, ip, lr, pc}
0x8: e24cb004 sub fp, ip, #4 ; 0x4
0xc: e1a00000 nop (mov r0,r0)
將其更改爲NOP像
Linux內核在運行時可以做類似的事情,但我正在尋找一個構建時間解決方案。
雖然您的觀點是有效的,但x86上的'nop'是一個單字節指令,因此您可以根據需要通過要刪除的可變長度指令編寫儘可能多的指令。 – 2009-06-01 17:47:01
對於可變長度指令的情況,會變得更加成問題的部分是搜索要變成無操作的指令模式,因爲您不能分辨給定的字節偏移量是否是指令的開始而不解碼抵消之前的指令。如果你認爲巧妙的手工編譯彙編技巧就像分支到有時用來打敗(或者至少阻礙)二進制文件逆向工程的指令中間,那更糟糕。 – 2009-06-01 18:14:58