一个DirectDraw的窗口,为什么每次获取指针坐标都不同?(200分)

  • 主题发起人 主题发起人 kyoty
  • 开始时间 开始时间
K

kyoty

Unregistered / Unconfirmed
GUEST, unregistred user!
RT..分不够再加……
 
设置断点
 
谢谢LS,我试试~~
 
(#-_-)
如何使用DELPHI对进程的某个偏移地址进行断点?
 
delphi不是可以设置data break point, 一旦有数据写入此地址, 就会中断在写入的代码
 
(#- -)

我在自己写调试器,调试被HOOK的进程中的数据……
不知道如何下断点获取断点处的寄存器信息
 
转帖
原文地址 http://blog.csdn.net/pzhccy/archive/2008/03/12/2174932.aspx

下面是封包截取的实现过程,修改一下即可实现bt功能。

1.CreateProcess或者FindWindow或者完美进程ID(dwW2iProcessId)

2.调试进程DebugActiveProcess(dwW2iProcessId)

3.进入调试循环体等待调试事件产生WaitForDebugEvent(&DebugEv, 10)

4.接收到CREATE_PROCESS_DEBUG_EVENT事件时,对全部线程设立断点。
(我可能复杂了,用CREATE_THRAD_DEBUG_EVENT事件可能简单些,刚会用就不错了呵呵,开始我只在主线程里设置了断点,死活断不下来)

下面是设置断点的方法,使用GetThreadContext和SetThreadContext函数
对于bt功能,修改寄存器的值,也通过这两个函数来实现。

HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, ThreadInfo.th32ThreadID);
SuspendThread(hThread);

CONTEXT Regs = {0};
Regs.ContextFlags = CONTEXT_DEBUG_REGISTERS;
//CONTEXT_DEBUG
::GetThreadContext(hThread, &Regs);

Regs.Dr0 = W2I_SENDCALL_ADDR1;
//中断地址
Regs.Dr7 = BREAK_DR7_FLAG;
//0x401启用dr0断点

::SetThreadContext(hThread, &Regs);

ResumeThread(hThread);
CloseHandle(hThread);

5.当在所需地址处中断时,来进行我们真正的功能操作,读取数据或者设置数据,同时设置数据改回处的断点。

ReadProcessMemory(hW2iProcess, (void*)Regs.Ecx, buf, len, &len);

6.当在数据改回处中断时,将寄存器值恢复,并设置修改处断点(其实可以一起设置好,但是要占用两个dr寄存器。dr寄存器一共4个,所以节省下只用一个,这样最多也只可以实现4个中断功能,不知道说清楚没)

7.当完美进程结束时,响应EXIT_PROCESS_DEBUG_EVENT事件,也退出。

注意每次中断时要用ContinueDebugEvent(DebugEv.dwProcessId, DebugEv.dwThreadId, dwContinueStatus)继续。
 
http://blog.csdn.net/firingme/archive/2003/09/16/16485.aspx
http://blog.csdn.net/firingme/archive/2003/07/07/16486.aspx
 
DrX调试寄存器使用 一
http://blog.csdn.net/firingme/archive/2003/09/16/16485.aspx

这样行不?这段代码跟踪你的地址是否指定地址,如果是则当前位置触发断点,但是
不知道这代码写在哪里合适,哈哈,还得注意保护现场。

var
MyBaseAddr, MyOffset: DWORD;
asm
mov edx, MyBaseAddr //基地址
cmp edx, 1000h
jnz @@Exit
mov eax, MyOffset
cmp eax,3dF8h //偏移量
jnz @@Exit
int 3 //断点中断,触发断点后Debug-View CPU调出汇编语言窗口,按Ctrl+C键会显示从哪个地址跳到这里
@@Exit:
end;
 
后退
顶部