L LRQY Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-28 #1 怎样实现TRW的断点设置功能?知道运行的程序执行到了什么地方(最好有实例)[!]
热 热血 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-28 #3 win32下的ip寄存器是eip mov eax,eip trw断点设置有几种方式 比如int 3,调试寄存器,缺页异常等。 具体的可以参考linux内核源代码
热 热血 Unregistered / Unconfirmed GUEST, unregistred user! 2002-01-30 #7 这些东西除了linux源码外 基本上没有例子的 属于高级技术
热 热血 Unregistered / Unconfirmed GUEST, unregistred user! 2002-02-01 #9 int3有几种,我知道两种 一是用debug api来做,中断时操作系统会通知你 二是自己用WriteProcessMemory来向目标地址写0xCC,自己再接管中断
P Pipi. Unregistered / Unconfirmed GUEST, unregistred user! 2002-02-02 #10 要每步跟踪需要更大的麻烦 我做过的某个程序,需要的只是在某个点中断一下(某个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等,要在跳转的目的地设置断点,很麻烦的,所以每一条指令都跟踪,编程工作量很大的
要每步跟踪需要更大的麻烦 我做过的某个程序,需要的只是在某个点中断一下(某个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等,要在跳转的目的地设置断点,很麻烦的,所以每一条指令都跟踪,编程工作量很大的
L LRQY Unregistered / Unconfirmed GUEST, unregistred user! 2002-02-03 #11 pipi,你可不可以把你的程序发给我呀 sibly_kd@163.com 谢谢!到时我给你一些好礼物!
P Pipi. Unregistered / Unconfirmed GUEST, unregistred user! 2002-02-03 #12 对不起,由于软件版权的原因。 我只能提供上面这些思路了