【问题标题】:GDB examine memory permissionsGDB 检查内存权限
【发布时间】:2012-06-02 13:52:42
【问题描述】:

我在内存中有一个地址,我想找出该内存地址的权限 (r/w/x)。

例如

char *s = "hello";

这里,字符串文字“hello”存储在只读存储器中。通过 gdb 运行程序时,是否可以检查该内存地址的权限(是否允许只读等)?

【问题讨论】:

  • 您可以在 GDB 中使用info proc mappings,但它不会授予您权限。您可以查看/proc/PID/maps,其中PID 是您的进程的pid——这将为您提供具有权限的地图。

标签: c linux gcc gdb virtual-address-space


【解决方案1】:

你可以先找到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 获取。

【讨论】:

  • 我正在使用 LLDB,其等效命令是“图像转储部分”
猜你喜欢
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 2013-07-01
  • 1970-01-01
  • 2017-09-26
  • 2017-09-17
相关资源
最近更新 更多