어셈블리어 썸네일형 리스트형 8. while문이 포함된 어셈블리어 코드 8. while문이 포함된 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include int main() { int lv=0; while (true) { if (lv == 2) break; printf("%x ", lv); lv++; } return 0; } [발췌-수정] 013A13EE 주소에서 지역 변수인 Lv([EBP-8)에 먼저 0을 할당한다. 013A13FE 주소에서 CMP 명령어로 2와 먼저 비교해 , 013A13FC 주소의 JNZ(jump not zero) 명령어에 의해 [EBR-8]에 할당된 변수가 2가 .. 더보기 7. for 리버싱 for문이 포함된 어셈블리어 코드 7. for 리버싱 for문이 포함된 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include int main() { int lv; for (lv=0; lv 더보기 6. 6개의 분기가 포함된 어셈블리어 코드 6. 6개의 분기가 포함된 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include int main() { int lv = 2; switch (lv) { case 0: printf("lv is 0 "); break; case 1: printf("lv is 1 "); break; case 2: printf("lv is 2 "); break; case 3: printf("lv is 3 "); break; case 4: printf("lv is 4 "); break; default: printf("default "); } .. 더보기 5. switch문이 포함된 어셈블리어 코드 5. switch문이 포함된 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include int main() { int lv = 2; switch (lv) { case 0: printf("lv is 0 "); break; case 2: printf("lv is 2 "); break; default: printf("default "); break; } return 0; } [발췌-수정] 00CD13EE 주소에서 지역변수인 lv([EBP-8])에 2를 할당하고 , 00CD13F5 주소에서 CMP 명령어로 0 과 먼저 비교한다.. 더보기 4. if 리버싱 (if문이 포함된 어셈블리어 코드) 4. if 리버싱 (if문이 포함된 어셈블리어 코드) 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include int main() { int lv = 2; if (lv > 0) printf("%x ", lv); return 0; } if문이 포함된 어셈블리어 코드 MOV DWORD PTR SS:[EBP-8],2 CMP DWORD PTR SS:[EBP-8],0 JLE SHORT 01141416 [발췌-수정] 011413EE 주소에서 지역 변수인 lv([EBP-8])에 2를 할당하고, 011413F5 주소에서 CMP 명령어로 상수 0과 .. 더보기 3. 구조체 출력 어셈블리어 코드 3. 구조체 출력 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include 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 M.. 더보기 2. 지역변수 출력 어셈블리어 코드 2. 지역변수 출력 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. #include int main() { int lv = 2; printf("%xn", lv); return 0; } 지역 변수를 출력하는 어셈블리어 코드 MOV DWORD PTR SS:[EBP-8],2 [발췌-수정] 지역 변수로 선언된 lv는 어셈블리어로 보면 스택에 저장된다. EBP 레지스터는 스택 변수에 접근하기 위해 스택의 특정 위치를 가리킨다. lv는 EBP 레지스터에서 8만큼 떨어져 있는 곳에 할당된 것을 확인 할 수 있다. 더보기 1. 전역변수 출력 어셈블리어 코드 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다. include int gv; int main() { gv = 2; printf("%x ", gv); return 0; } 전역변수 출력 어셈블리어 코드 MOV DWORD PTR DS:[gv],2 [발췌-수정] 전역 변수는 모든 함수에서 사용할 수 있다. 어셈블리어를 보면 전역 변수는 지역 변수와 다르게 데이터 세그먼트 위치에 저장한다. 올리디버거에서 MOV DWORD PTR DS:[gv],2 명령어가 표시된다. 전역 변수 gv의 정확한 메모리 위치(013113EE)가 표시된다. 이와 같이 전역.. 더보기 이전 1 2 다음