回复 39楼 吹水佬
明白了,谢谢
2022-01-29 13:44
2022-01-29 19:15
程序代码://\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/
// 函数名: 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;
}
2022-01-29 22:12
程序代码:#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编辑过]
2022-01-31 12:09
2022-01-31 19:45
程序代码:
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编辑过]
2022-02-03 11:53


2022-02-03 19:45
2022-02-04 06:52
2022-02-10 14:56