파이썬 스터디 과제43 4장-1 브레이크포인트 확장 브레이크포인트 확장PyDbg를 이용하면 사용자 정의 콜백 함수를 구현함으로써 기본적인 이벤트 핸들러를 쉽게 확장시킬 수 있다.소프트 브레이크포인트를 설정하는 PyDbg 함수의 프로토타입------------------------------------------------------------bp_set(address, description="" , restore=True, handler = None)------------------------------------------------------------address 파라미터는 소프트 브레이크포인트를 설정할 주소를 나타낸다.description 파라미터는 각 브레이크포인트에 고유한 이름을 부여할때 사용한다.(선택적)restore 파라미터는 발생한 브레이.. 2015. 1. 21. 3장-4 브레이크포인트-3 (메모리브레이크포인트) 이 구문들을 기존의 my_debugger.py에 추가한다면 메모리 브레이크는 구현이 완료된다.printf함수에 대한 메모리 브레이크포인트를 설정한다면 "Guard Page Access Detected" 라는 문구를 볼 수 있을 것이다.먼저 브레이크포인트를 설정할 메모리 영역의 베이스 주소와 페이지 크기를 구한다. 그리고 해당 메로리 영역 페이지의 접근 권한을 변경해 보호 페이지로 설정한다.페이지의 크기를 제대로 계산하려면 먼저 운영체제에 디폴트 페이지 크기를 질의해봐야 한다. 이를 위해서는 GetSystemInfo() 함수를 이용해 SYSTEM_INFO 구조체 정보를 구하면 된다.SYSTEM_INFO 구조체의 dwPageSize 가 시스템의 페이지 크기 값을 나타낸다. 2015. 1. 17. 3장-4 브레이크포인트-2 (하드브레이크포인트) 결과창하드웨어 브레이크포인트는 CPU 디버그 레지스터의 특정 비트 값을 이용한다.먼저 프로세스 내의 모든 스레드 리스트를 구하고 각 스레드의 CPU 컨텍스트 레코드를 구한다.구한 스레드의 모든 컨텍스트 레코드의 디버그 레지스터중 하나에 원하는 브레이크포인트 주소를 설정한다.DR7 레지스터의 비트를 설정함으로써 브레이크포인트의 종류와 길이, 설정한 브레이크포인트를 활성화 시킨다. 2015. 1. 17. 3장-4 브레이크포인트-1 (소프트브레이크포인트) 브레이크포인트소프트 브레이크 포인트프로세스의 메모리를 읽고 쓸 수 있어야 한다. 이를 위해 ReadProcessMemory() 함수와 WriteProcessMemory()함수를 이용한다.두 함수의 프로토타입. 순서대로------------------------------------------------------BOOL WINAPI ReadProcessMemory(HANDLE hProcess,LPCVOID lpBaseAddress,LPVOID lqBuffer,SIZE_T nSize,SIZE_T* lpNumberOfBytesRead); BOOL WINAPID WriteProcessMemory(HANDLE hProcess,LPCVOID lpBaseAddress,LPCVOID lpBuffer,SIZE_T nS.. 2015. 1. 16. 3장-3 디버그 이벤트 핸들러 구현 디버그 이벤트 핸들러 구현이벤트가 발생했을 때 그 이벤트에 반응하기 위해서는 각 디버깅 이벤트에 대한 핸들러를 구현해야 한다. DEBUG_EVENT구조체에대해 자세히 알아보고 구조체 내부의 정보를 이용해 어떻게 디버깅이벤트를 처리할 것인지 판단할 것이다.DEBUG_EVENT-----------------------------------------------------typedef struct DEBUG_EVENT {DWORD dwDebugEventCode;DWORD dwProcessId;DWORD dwThreadId;union {EXCEPTION_DEBUG_INfO Exception;CREATE_THREAD_DBUG_INFO CreateThread;CREATE_PROCESS_DEBUG_INFO Creat.. 2015. 1. 15. 3장-2 CPU 레지스터 상태 얻기 CPU 레지스터 상태 얻기디버거는 언제든지 CPU 레지스터의 상태 정보를 캡처할 수 있어야 한다.그러기 위해 OpenThread() 함수를 이용해 디버깅 대상 프로세스의 핸들을 얻어야 한다.OpenThread() 함수의 프로토타입-----------------------------------------------------HANDLE WINAPI OpneThread(DWORD dwDesiredAccess,BOOL bInheritHandle,DWORD dwThreadId);-----------------------------------------------------OpenProcess() 함수의 프로토타입-----------------------------------------------------HAN.. 2015. 1. 14. 이전 1 2 3 4 5 6 7 8 다음 728x90