能力值:
( LV9,RANK:180 )
|
-
-
2 楼
123456
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
将要中断地方的指令修改成int 3.并且将原来的机器吗保存起来。
当程序运行到int 3时,自动中断下来。
OD就是这么工作的。
|
能力值:
( LV9,RANK:210 )
|
-
-
4 楼
前提是你自己的程序需要使用一套的调试指令 让程序中断到调试环境里
不然 直接写CC 程序会死掉
|
能力值:
(RANK:260 )
|
-
-
5 楼
用带有DEBUG_PROCESS标志的参数去调用CreateProcess,新创建的进程就以你的进程为调试器。在发生异常时,操作系统会首先通知调试器,调试器可以选择处理异常,或交给子进程自行处理,如果子进程的SEH链没有找到异常处理函数,则调试器会再得到一个通知。
这便是Win32调试器的基本原理,OD也是一样。
下断点的一般方法就是用0XCC替换原来的指令,当程序执行这条指令时便会引发一个“调试断点异常”,调试器便得到处理异常的控制权。进行完必要的操作,要让程序继续执行,就把原来的指令字节写回,然后ContinueDebugEvent即可。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
网上找到一段程序
DEBUG_EVENT DBEvent;
STARTUPINFO sif={0};
sif.cb=sizeof(sif);
PROCESS_INFORMATION pi={0};
BOOL STOP=0;
CreateProcess(NULL, _T("notepad.exe"),NULL,NULL,NULL,
DEBUG_PROCESS|DEBUG_ONLY_THIS_PROCESS,NULL,NULL,&sif,&pi);
do{
WaitForDebugEvent(&DBEvent,INFINITE);
DWORD dwState=DBG_EXCEPTION_NOT_HANDLED;
switch(DBEvent.dwDebugEventCode)
{
case EXCEPTION_DEBUG_EVENT:
{
switch(DBEvent.u.Exception.ExceptionRecord.ExceptionCode)
{
case EXCEPTION_BREAKPOINT:
{
//是不是在这里处理?
dwState=DBG_CONTINUE;
break;
}
}
break;
}
case EXIT_PROCESS_DEBUG_EVENT:
{
STOP=TRUE;
break;
}
}
if(!STOP)
{ContinueDebugEvent(pi.dwProcessId,pi.dwThreadId,dwState);}
}while(!STOP);
|
能力值:
( LV9,RANK:170 )
|
-
-
7 楼
看下一块三毛钱的那篇精华。
|
能力值:
( LV4,RANK:50 )
|
-
-
8 楼
如果是下一个条件断点如何去做呢?
例如我在CreateFile 函数上下一个断点,也就是说原理上将函数入口的机器码改成int 3,这个动作可以在程序加载完后实现,但断点事件发生后,我根据参数判断是否满足我的断点条件,满足当然好办,将int 3恢复成保存的机器码,但如何不满足,继续运行那么恢复后的机器码什么时候再修改成 int 3呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
if语句可以
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
网上有很多Loader模板,仔细研究看看就明白了
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
强,学习一下~~
|
|
|