如何获得其共享库的基地址?

时间:2017-08-17 06:20:01

标签: python memory glibc elf

我想从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]
  ...

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

1 个答案:

答案 0 :(得分:0)

  

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

testlib.so的基地址 nothing libc.so.6的基地址有关,前者无法从后者计算。

  

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

这句话没有任何意义。

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