프로세스의 메모리 구조 ( + ESP, EBP )

2017. 10. 25. 19:47SystemHacking/Assembly

 

 



[root@EH 3797]# cat maps

00000000-08048000 사용하지 않는 메모리 주소


08048000-08049000 r-xp 00000000 03:01 425373     /root/a.out : 1000 , 4096byte ,4K: text section

- 코드가 위치하는 주소


08049000-0804a000 rw-p 00000000 03:01 425373     /root/a.out : 1000 , 4096buyr ,4K: data section( data,bss,heap )

- 전역변수, 힙 공간 등의 주소


08xxxxxx ~ 40xxxxxx : HEAP 영역을 위한 예약된 영역


40xxxxxx : 공유라이브러리영역


40000000-40013000 r-xp 00000000 03:01 310116     /lib/ld-2.1.3.so : ld text section  

40013000-40014000 rw-p 00012000 03:01 310116     /lib/ld-2.1.3.so : ld data section

40014000-40016000 rw-p 00000000 00:00 0

4001c000-40109000 r-xp 00000000 03:01 310123     /lib/libc-2.1.3.so : libc text section

40109000-4010d000 rw-p 000ec000 03:01 310123     /lib/libc-2.1.3.so : libc data section

4010d000-40111000 rw-p 00000000 00:00 0


40111000-bfffe000 : Stack메모리를 위한 영역 ( 여유공간을 줌 )


bfffe000-c0000000 rwxp fffff000 00:00 0 : Stack메모리 ( bfffe000 ~ bfffffff )

- 지역변수의 주소 및 함수의 정보가 존재


c0000000~ ffffffff : Kernel 이 사용하는 메모리 




 

#include <stdio.h>

int global;

int main(){


  char *ptr = NULL;

  int a;

  int b;

  int c;


  printf("%s %s\n","Hello,","World!!!");


  printf("Code Section: 0x%08x \n", &main );

  printf("Data Section: 0x%08x \n", &global );


  ptr = (char*)malloc( 100 );

  printf("First Heap Data Section: 0x%08x \n", ptr );


  ptr = (char*)malloc( 100 );

  printf("Second Heap Data Section: 0x%08x \n", ptr );


  ptr = (char*)malloc( 100 );

  printf("Third Heap Data Section: 0x%08x \n", ptr );


  printf("Stack Memory_1: 0x%08x \n", &ptr );

  printf("Stack Memory_2: 0x%08x \n", &a );

  printf("Stack Memory_3: 0x%08x \n", &b );

  printf("Stack Memory_4: 0x%08x \n", &c );


  return 0;

}





[root@EH /root]# ./a.out

Hello, World!!!

Code Section: 0x08048400             // text section

Data Section: 0x080497e4              // data section

 // 힙 영역

First Heap Data Section:  0x080497f0

Second Heap Data Section: 0x08049858

Third Heap Data Section:  0x080498c0

 // 스택 영역

Stack Memory_1: 0xbffffb54

Stack Memory_2: 0xbffffb50

Stack Memory_3: 0xbffffb4c

Stack Memory_4: 0xbffffb48