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

问题描述:

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

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

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

testlib.so基址有什么做的基址libc.so.6,前者不能从后者计算。

我计算了偏移量记忆,但没有运行。

这句话没有任何意义。

为了得到更好的答案,试着解释你实际上想要达到的效果,你进行了什么计算,你期望得到什么结果,以及你观察到了什么。