September 02, 2019

How to check each memory address

Let's check the address of the text, data, BSS, heap, libc, and stack memory addresses with C code.

C 코드를 통해 Text, data, BSS, heap, libc, stack 메모리 영역의 주소를 확인한다.

// < check.c >

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dlfcn.h>

void aFunc() {
    printf("Function called");
}

char *global1 = "glob1";
char global2;

int main(){
    char *heap = malloc(128);
    void *tmp;
    long libcAddr;
    tmp = dlopen("/lib/libc.so.6", RTLD_LAZY);
    libcAddr = (long)dlsym(tmp, "scanf");

    printf("[Text]  %p\n", aFunc);
    printf("[Data]  %p\n",global1);
    printf("[BSS]   %p\n",&global2);
    printf("[Heap]  %p\n", heap);
    printf("[Libc]  %p\n", libcAddr);
    printf("[Stack] %p\n", &libcAddr);

    return 0;
}

How to compile.
컴파일 방법.

gcc -o check check.c -lc -ldl

- lc: Load the library "libc.so" before loading "libdl.so".
"libdl.so"를 로드하기 전 "libc.so"를 로드.

- ldl: Load the library "libdl.so".
"libdl.so" 라이브러리 로드.

root@ubuntu:~# ./check
[Text]  0x400736
[Data]  0x4008d4
[BSS]   0x601061
[Heap]  0x602010
[Libc]  0x7ffff7a777e0
[Stack] 0x7fffffffe580