1

gcc を使用して C コードをコンパイルし、readelf を使用して ELF のセクションをチェックすると、.data セクションのフラグが WA (書き込み可能および割り当て可能) に設定されていることがわかります。

これらのフラグを変更することは可能ですか? このセクションを実行可能にできますか?

このバイナリをデバッグするために gdb を使用しています。特定の時点で .data セクションのフラグを実行可能として設定したいと考えています。では、これは gdb または gcc を使用して実行できますか?

4

1 に答える 1

3

これらのフラグを変更することは可能ですか? このセクションを実行可能にできますか?

はい。これを 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)私が提案したものとは大きく異なります(mprotect5ではなく3つのパラメータを取ります)。man mprotectまた、注意深く読む必要があります。開始アドレスをページに揃える必要があります。

于 2013-08-21T06:56:20.640 に答える