반응형
프로그램이 실행되어 프로세스가 메모리에 적재되고 메모리와 레지스터가 어떻게 동작하는지 알아보기 위하여 간단한 프로그램을 예제로 본다.
gcc로 컴파일 해주고
gdb를 통해 disassamble을 해준다.
앞에 붙어 있는 주소는 logical address이다. 이 주소를 자세히 보면 function()함수가 아래에 자리 잡고 main()함수는 위에 자리잡고 있음을 알 수 있다.
위 그림과 같이 segment가 구성되었다.
(메모리 주소는 임의로 적었습니다.)
이 프로그램에서는 전역변수를 지정하지 않았기 때문에 data segment에는 링크된 라이브러리의 전역변수 값만 들어있을 것이다.
이 프로그램이 시작되면 EIP 레지스터 즉, CPU가 수행할 명령이 있는 레지스터는 main()함수가 시작되는 코드를 가리키고 있을 것이다.
main() 함수의 시작점은 0x080482fc가 되겠다.
ESP(ss레지스터가 가르치는 스택 세그먼트의 맨 꼭대기를 가르키는 포인터)가 정확히 어느 지점을 가르키는지 알아보기 위해 gdb를 이용하여 레지스터의 값을 알아보면
이렇게 나온다. (0xbfffe67c)
참고 : 해커 지망생이 알아야할 bof 기초 -달고나
반응형
'Security > Pwnable' 카테고리의 다른 글
Buffer Overflow 원리 - Buffer overflow의 이해 (0) | 2021.08.06 |
---|---|
Buffer Overflow 원리 - 프로그램 구동시의 segment (2) (0) | 2021.08.06 |
Buffer Overflow 원리 - 8086CPU 레지스터 구조 (0) | 2021.08.06 |
Buffer Overflow 원리 - 8086 메모리구조 (0) | 2021.08.06 |
FTZ Level 10 (0) | 2021.08.06 |