2017-04-13 1 views
1

バイナリファイルの1バイトを特定のoffsetに上書きしたいとします。値cvalは整数です。これを行うにはバイナリファイルの1バイトを上書きすると、objdumpによって認識されなくなりますか?

は、私は次のコードを書いている:offsetでバイトを読んだが、ELFバイナリを認識することはできませんobjdumpでこの位置結果への書き込み時に

f = open(program, "wb") 
f.seek(offset, 0) # absolute 
#print(f.read(1)) 
f.write(bytes([cval])) 
f.close() 

コードは完璧に動作します。

[email protected]:~/llvm-ir-obfuscation/checker$ objdump -dF fac_c 
objdump: fac_c: File format not recognized 

私は何が間違っていますか?

+0

ヘッダーには書いていませんか? –

+0

'f.read(1)'を実行すると、 '.text'セクションで正しく読み込まれます。しかし、書き込み操作は何とか物事を混乱させる。 – Shuzheng

+0

この質問を投稿する前に、あなたの "認識できない"ファイルサイズをチェックしないようにしてください。 – jsbueno

答えて

2

wモードでファイルを開いたところ、ファイルを開くときにファイルが切り詰められました。最終的なファイルはあなたが書いた1バイトのみで構成されます。

だけ更新モードで開き:

f = open(program, "r+b") 

、それは問題ないはずです。

1

は、I/O Pythonのファイルで、このチュートリアルを参照してください:

https://www.tutorialspoint.com/python/python_files_io.htm

RB +:読書とバイナリ形式での書き込みの両方のファイルを開きます。 ファイルポインタがファイルの先頭に配置されています。

何を混乱することは、書き込みと読み取りとWB +としてRB +を考えるということはおそらくです。ただし、両方のモードでファイルを読み書きするのに対し、後者はファイルを上書きします。

後者のモードではファイルが上書きされるため、ELFバイナリは効果的に破棄されます(ヘッダーはなくなります)。

関連する問題