본문 바로가기

Research/Windows

WER 발생 시 덤프 뜨기 Collecting User-Mode Dumps 아래 경로에 WER 이 발생하는 exe 명으로 키 값을 생성함. HKLM/Software/Microsoft/Windows/Windows Error Reporting/LocalDumps/ 아래 데이터들을 삽입 문자열 타입 DumpFolder - 덤프 떨어질 경로 (ex_c:\dumps)DWORD 타입 DumpCount - 최대 몇개를 생성할지 설정, 값이 없으면 infiniteDWORD 타입 DumpType - 풀덤프 2, 미니덤프 1, 커스텀 덤프 0. 커스텀 덤프는 사용한적이 없음.DWORD 타입 CustomDumpFlags - 커스텀 덤프 사용한적이 없어 해당 옵션은 사용해보지 않음. 원문 https://msdn.microsoft.com/ko-kr/li.. 더보기
프로그램 시작 시 디버거에 바로 붙이는 방법 부팅되자마자 실행되는 프로세스를 디버깅해야 하는 경우나자식 프로세스를 디버깅해야 한다거나뭐 기타등등 디버거를 붙이기 곤란한 경우에 사용할 수 있는 방법 HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ 여기에 프로그램명으로 키를 만들고 ex ) HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\iexplorer.exe 그 밑에 string value 를 만든다. 이름은 Debugger, 내용은 경로로. Debugger : REG_SZ : x64 에서 돌아가는 x32 프로세스의 경우 경로가 좀 다르다 HKLM\SOFTWARE.. 더보기
DEBUG_EVENT code 이벤트 코드 이벤트 코드 값 유니온 변수명 0x1 EXCEPTION_DEBUG_EVENT Exception 0x2 CREATE_THREAD_DEBUG_EVENT CreatThread 0x3 CREATE_PROCESS_DEBUG_EVENT CreateProcessInfo 0x4 EXIT_THREAD_DEBUG_EVENT ExitThread 0x5 EXIT_PROCESS_DEBUG_EVENT ExitEvent 0x6 LOAD_DLL_DEBUG_EVENT LoadDll 0x7 UNLOAD_DLL_DEBUG_EVENT UnloadDll 0x8 OUTPUT_DEBUG_STRING_EVENT DebugString 0x9 RIP_EVENT RipInfo https://msdn.microsoft.com/en-us/li.. 더보기
x86 Assembly/Control Flow InstructionDescriptionsigned-nessFlagsJOJump if overflow OF = 1JNOJump if not overflow OF = 0JSJump if sign SF = 1JNSJump if not sign SF = 0JE JZJump if equal Jump if zero ZF = 1JNE JNZJump if not equal Jump if not zero ZF = 0JB JNAE JCJump if below Jump if not above or equal Jump if carryunsignedCF = 1JNB JAE JNCJump if not below Jump if above or equal Jump if not carryunsignedCF = 0JBE JNAJump.. 더보기
PEB, PEB_LDR_DATA, LDR_MODULE typedef struct _PEB_LDR_DATA { ULONG Length; // +0x00 BOOLEAN Initialized; // +0x04 PVOID SsHandle; // +0x08 LIST_ENTRY InLoadOrderModuleList; // +0x0c LIST_ENTRY InMemoryOrderModuleList; // +0x14 LIST_ENTRY InInitializationOrderModuleList;// +0x1c } PEB_LDR_DATA,*PPEB_LDR_DATA; // +0x24 typedef struct _LDR_MODULE{ LIST_ENTRY InLoadOrderModuleList; +0x00 LIST_ENTRY InMemoryOrderModuleList; +0x08.. 더보기
windbg 심볼 / 치트 시트 아 외워도 맨날 까먹네 ㅠㅠ windbg symbol pathsrv*c:\websymbols*http://msdl.microsoft.com/download/symbols windbg cheeat sheet 더보기
C++ constructor 생성자 호출 방식 글로벌 오브젝트의 경우 /* * do C++ constructors (initializers) specific to this EXE */ if (__native_startup_state == __initializing)010816CD A1 B0 33 08 01 mov eax,dword ptr [___native_startup_state (10833B0h)] 010816D2 3B C6 cmp eax,esi 010816D4 75 1B jne __tmainCRTStartup+0D0h (10816F1h) { _initterm( __xc_a, __xc_z );010816D6 68 F4 20 08 01 push offset ___xc_z (10820F4h) 010816DB 68 E8 20 08 01 push off.. 더보기
calling convention, name mangling, C/C++ DLL Export 에 대해. 제목이 긴데... 윈도우 파트에만 한정하기도 그렇고... 하여튼.이런 것들이 연관되어서 문제가 꽤 있었고 골머리를 오래 싸맸다.C++ 로 만든 DLL 을 C 에서 사용하고 싶다거나C 로 만든 DLL 을 C++ 에서 사용하고 싶다거나.지금 생각하면 큰 문제는 아닌 것 같은데..; 정리 삼아. 먼저 Calling Convention 에 대해 간단히 요약해보자.주로 사용되는 stdcall / cdecl 과 fastcall 이라고 볼 수 있겠다.c++ 을 자주 사용하다 보니 thiscall 도 자주 보게 된다만 잠시 논외로 하고.. 글을 보는 사람들 모두가 알고 있겠지만, 이 Calling Convention 이 중요하게 다루어지는 이유는함수를 호출함에 있어서 스택의 정리 주체가 누구냐 ?stdcall 은 CA.. 더보기