3. 구조체 출력 어셈블리어 코드
본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. |
#include <stdio.h>
struct ST {
int sv_1;
int sv_2;
int sv_3;
};
int main()
{
struct ST st;
st.sv_1 = 1;
st.sv_2 = 2;
st.sv_3 = 3;
printf("%x, %x, %x\n", st.sv_1, st.sv_2, st.sv_3);
return 0;
}
구조체를 출력하는 어셈블리어 코드
MOV DWORD PTR SS:[EBP-14],1
MOV DWORD PTR SS:[EBP-10],2
MOV DWORD PTR SS:[EBP-C],3
[발췌]
C 언어의 int 형은 크기가 4바이트다. 따라서 ST 구조체의 크기는 12바이트가 된다.
어셈블러리어를 보면 아래 표의 스택 메모리와 같이 연속된 12바이트에
차례대로 값이 저장된다.
Low Address |
|
|
|
|
1 |
|
EBP-0x14 |
|
2 |
|
EBP-0x10 |
|
3 |
|
EBP-0xC |
|
|
|
|
|
|
|
|
|
|
<- |
EBP |
High Address |
|
|
|
'Reverse Engineering' 카테고리의 다른 글
6. 6개의 분기가 포함된 어셈블리어 코드 (0) | 2016.11.10 |
---|---|
5. switch문이 포함된 어셈블리어 코드 (0) | 2016.11.10 |
4. if 리버싱 (if문이 포함된 어셈블리어 코드) (0) | 2016.11.10 |
2. 지역변수 출력 어셈블리어 코드 (0) | 2016.11.10 |
1. 전역변수 출력 어셈블리어 코드 (0) | 2016.11.10 |