본문 바로가기

Reversing/Reversing15

PE의 IAT입력 과정 IMAGE_DIRECTORY_ENTRY_IMPORT |-------------------| | VirtualAddress | |-------------------| | Size | |-------------------| VirtualAddress + ImageBase가 IMAGE_IMPORT_DESCRIPTOR의 가상주소를 가진다. IMAGE_IMPORT_DESCRIPTOR (임포트 테이블) |----------------------| | OriginalFirstThunk | -> INT(IMPORT_NAME_TABLE) 주소 |----------------------| | TimeDateStamp | |----------------------| | ForwarderChain | |------------.. 2012. 10. 31.
함수 호출 규약 함수 호출 규약 cdecl test(1, 2, 3, 4) push 4 push 3 push 2 push 1 call test add esp, 16 stdcall test(1, 2, 3, 4) push 4 push 3 push 2 push 1 call test --> test함수 내부에서 ret 16 수행 fastcall 파라미터 : CPU 레지스터 2개 이용. (ECX, EDX) test(1, 2, 3, 4) push 4 push 3 mov edx, 2 mov ecx, 1 call test --> test함수 내부에서 ret 16 수행 c++ 호출 규약 비주얼 c++ : this를 ecx에 넣고 stdcall 처럼 동작. g++ : 첫 번째 파라미터에 암시적으로 this를 넣고 cdecl 처럼 동작. 2012. 10. 16.
Windbg 명령어 요약 [ WinDbg 명령어 요약 ] - Debugger Commands : 일반적인 디버거 명령 A (Assemble), U (Unassemble) BL (Breakpoint List), BC (Breakpoint clear) BD (Breakpoint Disable), BE (Breakpoint Enable) BA (Break on Access) BP, BU (Set Breakpoint) // BU : (unresolved - bp유지) D, DA, DB, DW, DD (Display Memory) Dds (Display words and Symbols) DL (Display Linked List) LIST_ENTRY or SINGLE_LIST_ ... DS, Ds (Display String) DT (D.. 2012. 10. 13.
혼동되는 어셈블리 명령어 NEG : 2의 보수 (부호 반전) NOT : 1의 보수 (비트 반전) MUL : AX와 오퍼랜드 곱셈 -> AX또는 DX:AX에 저장 IMUL 몫:AL, 나머지:AH DX:AX를 '' -> 몫:AX, 나머지:DX CBW : AL -> AX 확장 ex) eax에 0x12345678가 있으면 -> 0x12340078으로 됨 CWD : AX -> DX:AX 확장 SHL/SAL : 왼쪽 shift SHR/SAR : 오른쪽 shift (SAR은 산술 shift로 최상위 비트를 유지한다고 한다.) ROL/RCL : 회전 왼쪽 shift ROR/RCR : 회전 오른쪽 shift PUSHAD : 레지스터 내용을 스택에 push (EAX, ECX, EDX, EBX, ESP, EBP, ESI, EDI 순서) PUSHFD.. 2012. 10. 7.