delphi 中怎样获得正在运行程序的IP指针(200分)

  • 主题发起人 主题发起人 LRQY
  • 开始时间 开始时间
L

LRQY

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样实现TRW的断点设置功能?知道运行的程序执行到了什么地方(最好有实例)[:(!]
 
win32下的ip寄存器是eip
mov eax,eip

trw断点设置有几种方式
比如int 3,调试寄存器,缺页异常等。
具体的可以参考linux内核源代码
 
热血兄可否说详细些?最好给个例子啦,拜托,拜托!
 
高手们帮帮我呀
 
这些东西除了linux源码外
基本上没有例子的
属于高级技术
 
如果采用插入INT3,应该怎么办呢?
 
int3有几种,我知道两种
一是用debug api来做,中断时操作系统会通知你
二是自己用WriteProcessMemory来向目标地址写0xCC,自己再接管中断
 
要每步跟踪需要更大的麻烦
我做过的某个程序,需要的只是在某个点中断一下(某个dll的输出函数的入口处)
CreateProcess用DEBUG_PROCEES参数启动程序,程序启动前会自动产生一个断点中断
然后用这个时间找到那个地址以后,把旧内容保存下来,写入0xcc(就是指令int 3),
然后等待断点,用GetThreadContext可以得到context,包含了所有寄存器的信息
处理完毕把原来的指令写回去,把eip减1(重新运行那个指令),SetThreadContext
读写别的进程内存用 Read/WriteProcessMemory
修改code段的保护模式: VirtualProctectEx
如果你要每一条指令都中断,那么你要在入口地址设置int 3指令,中断之后恢复旧指令,
在下一条指令处设置int 3,eip减1重新执行,下一个中断又做这一步,因为指令长度不同
你要知道你在哪里才能设置断点(要设置在一条指令的第一个字节),你要判断jmp、条件jmp、
call等,要在跳转的目的地设置断点,很麻烦的,所以每一条指令都跟踪,编程工作量很大的
 
pipi,你可不可以把你的程序发给我呀
sibly_kd@163.com
谢谢!到时我给你一些好礼物!
 
对不起,由于软件版权的原因。
我只能提供上面这些思路了
 
没什么,不过还是要谢谢你!
 
后退
顶部