メモリ内にアドレスがあり、そのメモリ アドレスのパーミッション (r/w/x) を知りたいです。
例えば
char *s = "hello";
ここでは、文字列リテラル "hello" が読み取り専用メモリに格納されています。gdb を介してプログラムを実行する場合、そのメモリ アドレスのアクセス許可をチェックアウトする可能性はありますか (読み取りのみが許可されているかどうかなど)。
メモリ内にアドレスがあり、そのメモリ アドレスのパーミッション (r/w/x) を知りたいです。
例えば
char *s = "hello";
ここでは、文字列リテラル "hello" が読み取り専用メモリに格納されています。gdb を介してプログラムを実行する場合、そのメモリ アドレスのアクセス許可をチェックアウトする可能性はありますか (読み取りのみが許可されているかどうかなど)。
s
が指している場所を最初に見つけることができます:
(gdb) print s
$6 = 0x400dbc "foo"
次に、それが含まれているセクションを見つけます。
(gdb) maintenance info sections
Exec file:
`/home/mfukar/tmp', file type elf64-x86-64.
...sections...
0x00400db8->0x00400dfb at 0x00000db8: .rodata ALLOC LOAD READONLY DATA HAS_CONTENTS
...more sections...
READONLY
そして旗を探します。
/proc/PID/maps
または、デバッグしているプロセスのpidがどこにあるかを調べて、PID
で取得できますinfo proc
。