首页
社区
课程
招聘
[旧帖] [Delphi] 关于获取断点处寄存器内容的问题. 0.00雪花
发表于: 2010-1-12 14:06 3484

[旧帖] [Delphi] 关于获取断点处寄存器内容的问题. 0.00雪花

2010-1-12 14:06
3484
---------------------------------------------------------------------
title:=findwindow(nil,'英语通 V1.8');
GetWindowThreadProcessId(title,@Pid);
ProcessHandle:=GetTHandle(pid);
ProcessHandle := OpenThread(ProcessHandle,false);
Context.ContextFlags:=CONTEXT_FULL;
GetThreadContext(ProcessHandle,Context);
Context.Dr0 := $0049F566;
Context.Dr7 := $401;
SetThreadContext(ProcessHandle,Context);
SuspendThread(ProcessHandle);
edit1.text:= inttostr(Context.Ebx);
resumethread(ProcessHandle);
CloseHandle(ProcessHandle);
---------------------------------------------------------------------

我不太懂DEBUG.

我的意思是: 让代码运行在$0049F566(Eip)中断,然后获取EBX寄存器的内容.

但是貌似EIP一直不会指向$0049F566,而且入口点那里.

例如我用OD, 在$0049F566处设置断点, 点运行, Eip马上会指向$0049F566,并显示各个寄存器内容.

请问各位大师, 如何设置某个位置的断点. 并让程序运行到那个断点时, 截取其他积存器内容.

有代码最好.

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你要将你的程序附加到目标程序上, 才有权获取目标的调试信息:
DebugActiveProcess(dwProcessId);
2010-1-12 17:27
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
再详细一点就是先DebugActiveProcess附加到目标进程.

然后开始一个debug的循环

rv = WaitForDebugEvent(&dbgEvent, INFINITE);

在附加成功后, 你的程序会收到一堆伪造的调试事件, 其中就会有一个 CREATE_PROCESS_DEBUG_EVENT. 在这时候, 你可以去下一个断点. 然后ContinueDebugEvent

当收到 EXCEPTION_DEBUG_EVENT 事件的时候, 判断异常类型, 如果是中断则做处理.

这里有一个最简单的调试器模型: f55K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4u0W2j5h3c8Q4x3X3g2H3N6h3c8F1i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0%4L8X3I4G2j5h3c8K6z5e0u0Q4x3V1k6K6L8%4g2J5j5$3g2U0L8$3c8W2i4K6u0r3N6$3W2F1k6r3!0%4M7#2)9J5c8Y4y4&6M7%4c8W2L8g2)9J5c8U0x3#2y4o6p5K6y4#2)9J5c8Y4N6A6L8U0x3J5c8r3g2T1N6h3N6W2M7W2)9J5k6h3y4H3M7q4)9#2k6W2)9#2k6W2)9J5k6h3S2@1L8b7`.`.
2010-1-12 17:32
0
游客
登录 | 注册 方可回帖
返回