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

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

2010-1-12 14:06
3413
---------------------------------------------------------------------
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,并显示各个寄存器内容.

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

有代码最好.

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 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 事件的时候, 判断异常类型, 如果是中断则做处理.

这里有一个最简单的调试器模型: http://read.pudn.com/downloads92/sourcecode/windows/system/354137/win32Debuger.cpp__.htm
2010-1-12 17:32
0
游客
登录 | 注册 方可回帖
返回
//