19

メモリ内にアドレスがあり、そのメモリ アドレスのパーミッション (r/w/x) を知りたいです。

例えば

char *s = "hello";

ここでは、文字列リテラル "hello" が読み取り専用メモリに格納されています。gdb を介してプログラムを実行する場合、そのメモリ アドレスのアクセス許可をチェックアウトする可能性はありますか (読み取りのみが許可されているかどうかなど)。

4

1 に答える 1

20

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

于 2012-05-28T07:16:51.770 に答える