回复 39楼 吹水佬
明白了,谢谢
//\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ // 函数名: GetCoodeLen ///功 能: 获取指令长度 // 形 参: HANDLE g_hCurrentProcess // 形 参: const LPVOID lpAddress //\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/ int GetCoodeLen(const SIZE_T lpAddress) { // 1. 将调试程序的内存(OPCode)复制到本地 SIZE_T dwRetSize = 0; LPVOID lpRemote_Buf = new BYTE[32]; ZeroMemory(lpRemote_Buf,32); ReadProcessMemory(g_hProcess,(LPVOID)lpAddress,lpRemote_Buf,32,&dwRetSize); // 2. 初始化反汇编引擎 DISASM objDiasm; objDiasm.EIP = (UIntPtr)lpRemote_Buf; // 起始地址 objDiasm.VirtualAddr = (UINT64)lpAddress; // 虚拟内存地址(反汇编引擎用于计算地址) objDiasm.Archi = 0; // AI-X86 objDiasm.Options = 0x000; // MASM // 3. 反汇编代码 int nLen = Disasm(&objDiasm); delete[] lpRemote_Buf; return nLen; }
#define MY_ERROR 0x401 && 自定义消息 DECLARE long AddException IN except long,long,long DECLARE long RemoveException IN except DECLARE long GetException IN except long DECLARE long strlen IN msvcrt long AddException(_screen.hWnd, MY_ERROR, 1) && 0->全部忽略,1->提示选择 oErr = CREATEOBJECT("CError") BINDEVENT(_screen.hWnd, MY_ERROR, oErr, "onError") SYS(1079,1) ? 1234 SYS(2600,0,1," ") ? 5678 RemoveException() CLEAR ALL RETURN DEFINE CLASS CError as Session PROCEDURE onError(hWnd,Msg,wParam,lParam) && wParam指向EXCEPTION_RECORD结构的指针 nCode = CTOBIN(SYS(2600,wParam,4),"4RS") pMsg = GetException(nCode) ? TRANSFORM(nCode,"@0"), SYS(2600,pMsg,strlen(pMsg)) **QUIT ENDPROC ENDDEFINE
[此贴子已经被作者于2022-1-31 14:16编辑过]
cDefPath = ADDBS(JUSTPATH(SYS(16))) SET DEFAULT TO (cDefPath) #define MY_ERROR 0x401 && 自定义消息 DECLARE long AddException IN errdbg long,string@,long,long DECLARE long RemoveException IN errdbg DECLARE long GetException IN errdbg long DECLARE long strlen IN msvcrt long ** AddException(nType, cOutFile, hWnd, uMsg) 注册异常处理 ** 参数: ** nType ..... 0->全部忽略跳过,1->提示选择中止、重试、忽略 ** cOutFile .. 输出异常信息的文件名,为空不输出 ** hWnd ...... 接收异常信息的窗口句柄,为 0 不接收 ** uMsg ...... 发送异常信息的用户自定义消息,为 0 不发送 AddException(1, cDefPath+"errinfo.txt", _screen.hWnd, MY_ERROR) oErr = CREATEOBJECT("CError") BINDEVENT(_screen.hWnd, MY_ERROR, oErr, "onError") SYS(1079,1) ? 1111 fun1() RemoveException() && 注销异常处理 CLEAR ALL RETURN FUNCTION fun1() SYS(1079,1) ? 2222 fun2() ENDFUNC FUNCTION fun2() SYS(2600,0,1," ") ? 3333 ENDFUNC DEFINE CLASS CError as Session PROCEDURE onError(hWnd,Msg,wParam,lParam) && wParam指向EXCEPTION_RECORD结构的指针 nCode = CTOBIN(SYS(2600,wParam,4),"4RS") pMsg = GetException(nCode) ? TRANSFORM(nCode,"@0"), SYS(2600,pMsg,strlen(pMsg)) FOR i=1 TO PROGRAM(-1)-1 ? SPACE(i),PROGRAM(i) ENDFOR **QUIT ENDPROC ENDDEFINE
[此贴子已经被作者于2022-2-3 19:44编辑过]