-
-
关于INT 3的系统处理
-
发表于:
2012-10-24 19:47
4798
-
近期写了一个小程序,需要以调试方式启动另外一程序,并在其中写入一个INT 3指令,注入一个软件断点。并在调试事件的响应循环里对软件中断进行处理。代码片段如下:
case EXCEPTION_DEBUG_EVENT:
{
switch(de.u.Exception.ExceptionRecord.ExceptionCode)
{
case EXCEPTION_BREAKPOINT:
{
CONTEXT context;
context.ContextFlags = CONTEXT_ALL;
GetThreadContext(pi.hThread,&context);
在这里读出线程的上线文环境。发现读出的context.Eip的值为0XCC指令的个字节处。比如我把另一个进程地址为0X0068404E的字节改为0XCC,进入处理循环,即上面这段代码处时,context.Eip的值为0X0068404F.但我记得《软件调试》一书上讲过系统对INT 3指令做了特殊处理,具体在在83页.KiTrap03会自动对EIP的值减一。不知道这应该如何解释,多谢各位大神!
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课