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;
}
#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
[Text] 0x400736
[Data] 0x4008d4
[BSS] 0x601061
[Heap] 0x602010
[Libc] 0x7ffff7a777e0
[Stack] 0x7fffffffe580