これらのフラグを変更することは可能ですか? このセクションを実行可能にできますか?
はい。これを 1 回限り行う場合、最も簡単な方法は、ソースをアセンブリにコンパイルし、そこでセクション属性を変更してから、アセンブリをオブジェクト ファイルにコンパイルし、通常どおりリンクすることです。
このバイナリをデバッグするために gdb を使用しています。特定の時点で .data セクションのフラグを実行可能として設定したいと考えています。
mprotect(addr, len, PROT_READ|PROT_WRITE|PROT_EXEC)
GDB 内から呼び出すこともできます。
注:.data
バイナリがリンクされた後にセクションのフラグを変更しても、何の効果もありません。カーネルはセクションを参照せず、PT_LOAD
セグメントのみを参照します。
アセンブリコードでデータセクションを実行可能としてマークする方法は? 次のようなものだと思います: .section .data,"awx",@progbits.
はい、それは正しいようです。うまくいきませんでしたか?
mprotect() が見つかりません
実行可能ファイルは静的にリンクされていますか? そうでない場合はmprotect
( で) 見つかるはずでlibc.so
あり、GDB のバグがある可能性があります。最初にGDBを見つけて見つけるように促すと役立つ場合がありmprotect
ますprint &mprotect
。
また、注意してください:mprotect(0x0804a020, 80, PROT_READ, PROT_WRITE, PROT_EXEC)
私が提案したものとは大きく異なります(mprotect
5ではなく3つのパラメータを取ります)。man mprotect
また、注意深く読む必要があります。開始アドレスをページに揃える必要があります。