如何使用GDB在内存中查找字符串的地址?

时间:2011-07-09 21:03:36

标签: c gdb

我想在内存中找到字符串的地址。在这种情况下,我正在寻找“/ bin / sh”。它是一个初始化变量,所以它在.data部分和编译后,它有一个固定的地址。那么我在GDB中如何查找其内存地址呢?而且我不知道它存储的变量的名称。

3 个答案:

答案 0 :(得分:11)

使用info proc map听起来对我来说更好。

(gdb) info proc map
process 930
Mapped address spaces:

      Start Addr           End Addr       Size     Offset objfile
        0x400000           0x401000     0x1000        0x0 /myapp
        0x600000           0x601000     0x1000        0x0 /myapp
        0x601000           0x602000     0x1000     0x1000 /myapp
  0x7ffff7a1c000     0x7ffff7bd2000   0x1b6000        0x0 /usr/lib64/libc-2.17.so
  0x7ffff7bd2000     0x7ffff7dd2000   0x200000   0x1b6000 /usr/lib64/libc-2.17.so
  0x7ffff7dd2000     0x7ffff7dd6000     0x4000   0x1b6000 /usr/lib64/libc-2.17.so
  0x7ffff7dd6000     0x7ffff7dd8000     0x2000   0x1ba000 /usr/lib64/libc-2.17.so

(gdb) find 0x7ffff7a1c000,0x7ffff7bd2000,"/bin/sh"
0x7ffff7b98489
1 pattern found.
(gdb) x /s 0x7ffff7b98489
0x7ffff7b98489: "/bin/sh"
(gdb) x /xg 0x7ffff7b98489
0x7ffff7b98489: 0x0068732f6e69622f

答案 1 :(得分:9)

使用find命令。

  

find [/sn] start_addr, +len, val1 [, val2, …]
  find [/sn] start_addr, end_addr, val1 [, val2, …]

     

在内存中搜索val1,val2等指定的字节序列。   搜索从地址start_addr开始,并继续为len   bytes或through到end_addr包含。   s和n是可选参数。它们可以在任何一个中指定   订购,分开或一起。

     

s,搜索查询大小每个搜索查询值的大小。

     

b bytes

     

h halfwords(两个字节)

     

w字(四个字节)

     

g巨字(八字节)

     

所有值均以当前语言解释。这意味着,为   如果当前源语言是C / C ++然后搜索   对于字符串“hello”包括尾部'\ 0'。

     

如果未指定值大小,则从值的类型中获取值   用当前的语言。当想要指定时,这很有用   搜索模式作为类型的混合。请注意,这意味着,为   例如,在类C语言的情况下,搜索无类型   0x42将搜索'(int)0x42',通常为4个字节。

     

n,最大查找次数要打印的最大匹配数。该   默认是打印所有查找。

     

您可以使用字符串作为搜索值。用双引号引用它们   (“)。字符串值逐字节复制到搜索模式中,   无论目标的字节顺序和大小规格如何。

     

打印每个匹配的地址以及计数   发现的匹配数量。

     

找到的最后一个值的地址存储在便利变量中   “$ _”。匹配数的计数存储在'$ numfound'中。

答案 2 :(得分:9)

如果要在流程的整个地址空间中进行搜索,则需要获取流程的内存映射。使用起始地址&在gdb中使用find命令的结束地址。

例如,如果cat /proc/$PID/maps显示您的进程的虚拟内存范围从0x08048000到0xc0000000,则可以按以下方式搜索:

(gdb) find 0x80048000, 0xc0000000, "/bin/sh"

获取进程内存映射的另一种方法是使用gdb的嵌入式命令:

(gdb) info proc map