본문 바로가기

3. Pwnable (포너블)/2) 개념 정리

[2020.04.07] pw.Sly - 달고나 문서 ~p27 (2)

 

출석 : 모두들 정시출석 good

학습내용 : 달고나문서 ~p.27까지 심층공부, pwnable.kr 3번 bof문제 풀이

지난 주 잘 이해하지 못했던 달고나문서를 심층적으로 공부하고, bof 1문제를 풀어보았다.

 

[달고나문서]

 

<문슬리>

Q1. 시스템이 리셋되어 초기화되면 플래그 레지스터는 왜 0x00000002의 값을 가지게되는가?

 

A. 밑의 사진을 잘 보면 1번 비트값이 1임. 나머지가 모두 초기화된다고 하면 2진수로 00000000000000000000000000000010이고, 이는 16진수로 0x00000002이므로 시스템이 초기화되면 플래그 레지스터는 0x00000002의 값을 갖게됨.

출처 : 달고나문서 그림8. 플래그 레지스터의 구성

 

Q2. 프로그램 구동에서 -o 옵션은 무슨 옵션인가?

 

A. 특정 파일명으로 실행 파일을 생성할 때 쓰는 옵션이다.

출처 : 손슬리 필기

 

<박슬리>

- 모르는건 아니고, 달고나문서 보면서 오류를 찾아보았다.

1. 커널주소가 반대로 쓰인 것 같다.

=> 다른 문서들은 모두 Kernel이 high address에 있는데, 달고나는 low address라고 쓰여있음.

 

2. offset과 logical address의 설명과 예시가 반대로 쓰인 것 같다.

=> 달고나 p.6보면 시작위치가 offset이고 시작 위치로부터의 위치가 logical address라고 되어있는데, offset의 정의를 찾아보면 시작위치로부터의 위치가 offset이라고 되어있다.

 

3. 범용 레지스터가 4개의 32bit 변수라고 되어있는데, 찾아보면 8개의 32bit 변수이다.

 

<오슬리>

Q1. 왜 다 4Byte인가?

 

A. 32비트 운영체제에서 명령을 수행하는 단위(워드)가 4바이트이기 때문이다. (달고나에서 다루는 8086 프로세서는 32비트 프로세서) 추가로, 워드는 프로세서마다 다를 수 있다.