【问题标题】:Buffer Overflow Memory Map interpretation缓冲区溢出内存映射解释
【发布时间】:2009-12-11 03:15:13
【问题描述】:

我正在处理一个微不足道的缓冲区溢出问题(是的,利用;但与问题无关)我试图找出内存映射中的字段,当 GCC 的堆栈保护器启用时。举例说明:

$ ./overflow
*** stack smashing detected ***: ./overflow terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xb7f67da8]
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xb7f67d60]
./overflow[0x804845c]
[0x41414141]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:06 3704767    /home/hatred/w0rk/bugz
08049000-0804a000 r--p 00000000 08:06 3704767    /home/hatred/w0rk/bugz
0804a000-0804b000 rw-p 00001000 08:06 3704767    /home/hatred/w0rk/bugz
0804b000-0806c000 rw-p 0804b000 00:00 0          [heap]
b7e5a000-b7e67000 r-xp 00000000 08:06 368705     /lib/libgcc_s.so.1
b7e67000-b7e68000 r--p 0000c000 08:06 368705     /lib/libgcc_s.so.1
b7e68000-b7e69000 rw-p 0000d000 08:06 368705     /lib/libgcc_s.so.1
b7e69000-b7e6a000 rw-p b7e69000 00:00 0 
b7e6a000-b7fc6000 r-xp 00000000 08:06 386037     /lib/tls/i686/cmov/libc-2.9.so
b7fc6000-b7fc7000 ---p 0015c000 08:06 386037     /lib/tls/i686/cmov/libc-2.9.so
b7fc7000-b7fc9000 r--p 0015c000 08:06 386037     /lib/tls/i686/cmov/libc-2.9.so
b7fc9000-b7fca000 rw-p 0015e000 08:06 386037     /lib/tls/i686/cmov/libc-2.9.so
b7fca000-b7fcd000 rw-p b7fca000 00:00 0 
b7fdf000-b7fe1000 rw-p b7fdf000 00:00 0 
b7fe1000-b7fe2000 r-xp b7fe1000 00:00 0          [vdso]
b7fe2000-b7ffe000 r-xp 00000000 08:06 368654     /lib/ld-2.9.so
b7ffe000-b7fff000 r--p 0001b000 08:06 368654     /lib/ld-2.9.so
b7fff000-b8000000 rw-p 0001c000 08:06 368654     /lib/ld-2.9.so
bffeb000-c0000000 rw-p bffeb000 00:00 0          [stack]
Aborted

所以,如您所见;有回溯,然后是内存映射,有 5 个字段,然后是可选的第六个字段,其中可能包括 .so.1(共享库?)我在问这些字段是什么,它们的含义,比如十六进制字段,以及 rw-p 的含义等。

我在谷歌上搜索过,但没有这样的结果。

谢谢。

【问题讨论】:

    标签: c linux gcc assembly buffer-overflow


    【解决方案1】:

    查看the /proc filesystem 的手册页,它包含您需要的所有信息:

    /proc/[编号]/maps 包含当前映射的内存区域及其访问权限的文件 权限。

    The format is:
    
    address           perms offset  dev   inode      pathname
    08048000-08056000 r-xp 00000000 03:0c 64593      /usr/sbin/gpm
    08056000-08058000 rw-p 0000d000 03:0c 64593      /usr/sbin/gpm
    08058000-0805b000 rwxp 00000000 00:00 0
    40000000-40013000 r-xp 00000000 03:0c 4165       /lib/ld-2.2.4.so
    40013000-40015000 rw-p 00012000 03:0c 4165       /lib/ld-2.2.4.so
    4001f000-40135000 r-xp 00000000 03:0c 45494      /lib/libc-2.2.4.so
    40135000-4013e000 rw-p 00115000 03:0c 45494      /lib/libc-2.2.4.so
    4013e000-40142000 rw-p 00000000 00:00 0
    bffff000-c0000000 rwxp 00000000 00:00 0
    
    where address is the address space in the process that it occupies, perms
    

    是一组权限:

    r = read
    w = write
    x = execute
    s = shared
    p = private (copy on write)
    
    offset is the offset into the file/whatever, dev is the device
    

    (major:minor),而inode就是inode 在那个设备上。 0 表示没有 inode 与内存相关联 区域,与 bss 一样。

    【讨论】:

      猜你喜欢
      • 2013-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      相关资源
      最近更新 更多