동아리, 스터디, 봉사

HASH 4기 동계 멘토링 2주차

ㅇㅏ도 2024. 2. 16. 23:43

1. PE파일 구조에서 각 섹션 사이에 null값이 존재 하는 이유는 무엇인가요?

->최소 기본 단위를 사용하기 위해

최소 기본 단위란 컴퓨터에서 파일 메모리 네트워크 패킷등을 처리할 때 효율을 높이기 위한 개념

== 파일 메모리에서 섹션의 시작 위치는 각각 최소 기본 위치의 배수에 해당하는 위치여야 한다. 따라서 빈 강간을 null값으로 채움

== 이것을 얼라이먼트라고 부르며 효율성을 위해 특정 단위로 간격을 맞추며 빈 공간을 null값으로 채움!

 


2. PE헤더 내 정보들이 RVA형태로 존재하는 이유는 무엇인가요?

 

-> PE헤더의 정보는 VA라는 가상 메모리의 절대 주소로 저장된다. VA는 RVA+imagebase의 값이며 RVA는 가상메모리 상대주소이다. 만약 가상 메모리 특정 위치에 로딩될 때 다른 PE 파일이 로딩되어 있을 수 있고 이렇게 된다면 재배치 과정을 통해 빈 공간에 위치시켜야 하기 때문에 PE 헤더 내 정보들은 가상메모리인 RVA 형태로 존재한다. 


3. 다음 중 틀린 것을 고르시오
스택은 LIFO구조이다.
 
EAX에서 E는 64비트를 의미한다. (정답)
 
CPU는 자체적으로 데이터를 처리할 방법이 없다.
 
CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 기억장치는 레지스터이다.

4. 다음 중 옳은 것을 고르시오
스택 프레임은 매개변수, 반환 주소 값, 지역 변수 등이 저장된다. (정답)
 
스택이 쌓일수록 ESP의 주소는 높아진다
 
EBP는 스택 프레임의 최상단을 가리키는 레지스터이다.
 
스택 영역은 낮은 주소에서 높은 주소 방향으로 할당된다.
 
->

 


5. ESP와 EBP의 차이점을 쓰시오

 

-> ESP는 하나의 스택 프레임의 끝 지점 주소를 저장하지만 EBP는 하나의 스택 프레임의 시작 주소를 저장한다. 


6. PE파일 생성 과정 순서로 알맞은 것을 고르시오

소스코드 작성 -> 바이너리로 변경 -> exe파일로 빌드 -> 필요한 라이브러리 연결
 
필요한 라이브러리 연결 -> 소스코드 작성 -> 바이너리로 변경 -> exe파일로 빌드
 
소스코드 작성 -> exe파일로 빌드 -> 필요한 라이브러리 연결 -> 바이너리로 변경
 
소스코드 작성 -> 바이너리로 변경 -> 필요한 라이브러리 연결 -> exe파일로 빌드 (정답)

 

 


7. 다음 중 틀린 것을 모두 고르시오

fast bin을 제외하고 free chunk는 unsorted bin에 보관된다.
 
DOS헤더의 시그니처 값은 50 45이며, 텍스트로 변환하면 MZ이다. (정답)
 
NT헤더의 시그니처 값은 4D 5A이며, 텍스트로 변환하면 PE이다. (정답)
 
prev_inues는 이전 청크가 사용 중인지 아닌지를 판별하는 플래그로, 사용중이라면 0, free라면 1로 설정된다. (정답)
 

-> DOS 헤더 시그니처 값은 4D 5A (MZ)이고 NT헤더의 시그니처 값은  50 45(PE)이다. 사용중이라면 1, free라면 0으로 설정된다. 


8. chunk에 대한 설명 중 틀린 것을 고르시오
재사용 가능한 청크가 없을 때 할당 요청이 올 때, 분리 후 영역을 반환해주는 청크는 top chunk이다.
 
다음 청크의 위치를 구할 때 size를 조작하면 다음 청크의 위치를 조작할 수 있다.
 
free chunk에서 FD는 다음 청크, BK는 이전 청크를 가리키는 포인터이다.
 
이전 청크의 위치를 구할 때 size를 조작하면 이전 청크의 위치를 조작할 수 있다.  (정답)
 
-> 

 


9. 이전 chunk가 해제되어야 현재 chunk의 prev size의 값이 할당된다. O/X

O


10. 다음은 스택의 연산들이다. 6을 수행한 결과는 무엇인가

1. CreateS(4);
2. Push(stack, 'H');
3. Push(stack, 'C');
4. Pop(stack);
5. Push(stack, 'A');
6. Push(stack, 'S');
7. Push(stack, 'H');
8. Push(stack, 'S');
9. Pop(stack);