libc_base & ld_base lower 12 bits

우리는 익스 코드를 짜면서 디버깅용으로 libc_base 주소를 출력시키고는 한다.

이때 소소한 꿀팁은 remote로 실행할때도 출력시킬때

출력되는 값이

C
stdout =  0x7f9dc6048620
libc_base =  0x7f9dc5c83000
ld_base =  0x7f9dc6272000

다음과 같이 base는 아래 12비트가 0인것을 주의해야 한다. 이를 통해 서버에서도 내 코드가 잘 작동하고 있는 건지 디버깅을 할 수 있다.

C
pwndbg> vmmap
LEGEND: STACK | HEAP | CODE | DATA | RWX | RODATA
    0x555555400000     0x555555401000 r-xp     1000 0      /home/rtld/rtld
    0x555555601000     0x555555602000 r--p     1000 1000   /home/rtld/rtld
    0x555555602000     0x555555603000 rw-p     1000 2000   /home/rtld/rtld
    0x7ffff7a0d000     0x7ffff7bcd000 r-xp   1c0000 0      /lib/x86_64-linux-gnu/libc-2.23.so
    0x7ffff7bcd000     0x7ffff7dcd000 ---p   200000 1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
    0x7ffff7dcd000     0x7ffff7dd1000 r--p     4000 1c0000 /lib/x86_64-linux-gnu/libc-2.23.so
    0x7ffff7dd1000     0x7ffff7dd3000 rw-p     2000 1c4000 /lib/x86_64-linux-gnu/libc-2.23.so
    0x7ffff7dd3000     0x7ffff7dd7000 rw-p     4000 0      
    0x7ffff7dd7000     0x7ffff7dfd000 r-xp    26000 0      /lib/x86_64-linux-gnu/ld-2.23.so
    0x7ffff7fed000     0x7ffff7ff0000 rw-p     3000 0      
    0x7ffff7ff6000     0x7ffff7ffa000 r--p     4000 0      [vvar]
    0x7ffff7ffa000     0x7ffff7ffc000 r-xp     2000 0      [vdso]
    0x7ffff7ffc000     0x7ffff7ffd000 r--p     1000 25000  /lib/x86_64-linux-gnu/ld-2.23.so
    0x7ffff7ffd000     0x7ffff7ffe000 rw-p     1000 26000  /lib/x86_64-linux-gnu/ld-2.23.so
    0x7ffff7ffe000     0x7ffff7fff000 rw-p     1000 0      
    0x7ffffffde000     0x7ffffffff000 rw-p    21000 0      [stack]
0xffffffffff600000 0xffffffffff601000 --xp     1000 0      [vsyscall]

다음과 같이 핵심 base들은 모두 000 이다.