【问题标题】:How get base address its shared library?如何获取其共享库的基地址?
【发布时间】:2018-01-25 10:36:05
【问题描述】:

我想从 libc.so.6 基地址获取 testlib.so 的地址。(因为 ASLR)

testlib.so 是共享库。

gcc -o ./testlib.so ./testlib.c -fPIC -shared -ldl

我编写了 python 代码来查找内存映射状态。

from ctypes import *

#libc = CDLL('libc.so.6')
libc = CDLL('/lib/x86_64-linux-gnu/libc.so.6')
test = CDLL('./testlib.so')

print libc
print test

结果

<CDLL '/lib/x86_64-linux-gnu/libc.so.6', handle 7f17750a09b0 at 7f1774f40210>
<CDLL './testlib.so', handle 15b6ea0 at 7f1774f40550>

运行此代码时的内存状态。

      Start Addr           End Addr       Size     Offset objfile
        0x400000           0x6ea000   0x2ea000        0x0 /usr/bin/python2.7
        0x8e9000           0x8eb000     0x2000   0x2e9000 /usr/bin/python2.7
        0x8eb000           0x962000    0x77000   0x2eb000 /usr/bin/python2.7
        0x962000           0xa6f000   0x10d000        0x0 [heap]
  0x7ffff63e1000     0x7ffff6483000    0xa2000        0x0 /home/wwwlk/Downloads/testlib.so
  ^ target address
  0x7ffff6483000     0x7ffff6682000   0x1ff000    0xa2000 /home/wwwlk/Downloads/testlib.so
  0x7ffff6682000     0x7ffff6683000     0x1000    0xa1000 /home/wwwlk/Downloads/testlib.so
  0x7ffff6683000     0x7ffff6684000     0x1000    0xa2000 /home/wwwlk/Downloads/testlib.so
  ...
  0x7ffff77f0000     0x7ffff79b0000   0x1c0000        0x0 /lib/x86_64-linux-gnu/libc-2.23.so
  ^ libc.so.6 address
  0x7ffff79b0000     0x7ffff7bb0000   0x200000   0x1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
  0x7ffff7bb0000     0x7ffff7bb4000     0x4000   0x1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
  0x7ffff7bb4000     0x7ffff7bb6000     0x2000   0x1c4000 /lib/x86_64-linux-gnu/libc-2.23.so
  0x7ffff7bb6000     0x7ffff7bba000     0x4000        0x0 
  ...
  0x7ffff7ff8000     0x7ffff7ffa000     0x2000        0x0 [vvar]
  0x7ffff7ffa000     0x7ffff7ffc000     0x2000        0x0 [vdso]
  0x7ffff7ffc000     0x7ffff7ffd000     0x1000    0x25000 /lib/x86_64-linux-gnu/ld-2.23.so
  0x7ffff7ffd000     0x7ffff7ffe000     0x1000    0x26000 /lib/x86_64-linux-gnu/ld-2.23.so
  0x7ffff7ffe000     0x7ffff7fff000     0x1000        0x0 
  0x7ffffffde000     0x7ffffffff000    0x21000        0x0 [stack]
  ...

我计算了偏移内存,但它没有运行。这里需要什么技术?

【问题讨论】:

    标签: python memory glibc elf


    【解决方案1】:

    我想从 libc.so.6 基地址获取 testlib.so 的地址。(因为 ASLR)

    testlib.so的基地址与libc.so.6的基地址无关,前者不能从后者计算出来。

    我计算了偏移内存,但没有运行。

    这种说法毫无意义。

    要获得更好的答案,请尝试解释您实际想要达到的目标、执行的计算、预期的结果以及观察到的结果。

    【讨论】:

      猜你喜欢
      • 2022-01-11
      • 2011-03-18
      • 2018-08-05
      • 2022-11-17
      • 2013-10-01
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 2017-07-10
      相关资源
      最近更新 更多