본문 바로가기
Security/Pwnable

Buffer Overflow 원리 - 프로그램 구동시의 segment (1)

by J0DEV 2021. 8. 6.
반응형

프로그램이 실행되어 프로세스가 메모리에 적재되고 메모리와 레지스터가 어떻게 동작하는지 알아보기 위하여 간단한 프로그램을 예제로 본다.

gcc로 컴파일 해주고

gdb를 통해 disassamble을 해준다.

 

(32bit 레드헷 리눅스에서 했습니다.)

 

 

앞에 붙어 있는 주소는 logical address이다. 이 주소를 자세히 보면 function()함수가 아래에 자리 잡고 main()함수는 위에 자리잡고 있음을 알 수 있다.

 

 

 

 

 

위 그림과 같이 segment가 구성되었다.

(메모리 주소는 임의로 적었습니다.)

이 프로그램에서는 전역변수를 지정하지 않았기 때문에 data segment에는 링크된 라이브러리의 전역변수 값만 들어있을 것이다.

이 프로그램이 시작되면 EIP 레지스터 즉, CPU가 수행할 명령이 있는 레지스터는 main()함수가 시작되는 코드를 가리키고  있을 것이다.

main() 함수의 시작점은 0x080482fc가 되겠다.

 

ESP(ss레지스터가 가르치는 스택 세그먼트의 맨 꼭대기를 가르키는 포인터)가 정확히 어느 지점을 가르키는지 알아보기 위해 gdb를 이용하여 레지스터의 값을 알아보면 

 

 

 

 

이렇게 나온다. (0xbfffe67c)

 

 

 

참고 : 해커 지망생이 알아야할 bof 기초 -달고나
반응형