2010年5月27日

実行ファイルの特定のセクションのエンディアンを変更する方法

endian.gif
(一部フィクションです)

そんなわけで、実行ファイルのグローバル変数とかが格納されている、.dataセクション、.rdataセクションのエンディアンを変更したい!
perlとかでがんばって書き変えるかめんどくせぇとか思ってたら、
objcopyコマンドで簡単にできてしまったのでメモ

gcc -c test.c -o test.o
objcopy -R .data -R .rdata test.o no-data.o
objcopy -R .text -R .bss --reverse-bytes=4 test.o reversed-data.o
gcc reversed-data.o no-data.o -o test.exe

test.cの内容は次のような感じであります

const char test_data[] = "ABCDEFGHIJKLMN";

int main() {
return 0;
}

普通にコンパイルしたのと、エンディアン変換したのの比較をすると次のような具合です

diff.gif


え、このバイナリちゃんと実行できるのかって!?

実行してないからわかんないです!!!

件のハードウェアでは60%くらいは上手くいってます。


今の僕にまじめに検証してる時間と精神力なんてないんです.................... orz .......
.... 関係者の方々本当すんません ..........

 

コメントする





トラックバック(0)

トラックバックURL: http://www.lunaport.net/mt/mt-tb.cgi/26

るなぽブログ

最近のブログ記事

その他