这听起来像是一件很简单的事情,但我似乎无法使其正常工作。

我想按指令在ImmDbg指令中运行程序的一部分,并跟踪一些动作它执行的操作(需要跳的时间,修改寄存器等)。当然,这是手工完成的繁琐过程,有时我需要将其自动化并根据目标添加一些自定义行为。

我在Python API中找不到跟踪工具,因此我试图单步执行代码。下面的示例代码应仅执行10条指令。

import immlib

imm = immlib.Debugger()

def main(args):
    for i in range(10):
        imm.stepIn()

    return "OK"


但是,似乎有时执行的指令少于10条,每个stepIn()调用都会冻结该程序约第二,渲染脚本的速度太慢,无法执行任何有用的操作。

评论

答案很简单:只需查看pycommand子目录中的mike.py。它具有stepIn()循环。执行时间过长的原因是,当您遇到系统DLL时,您应该将其跨步,如“ mike.py”中所示。

另外,请记住,只有在达到特定断点时(使用LogBpHook)才启用跟踪(通过调用stepIn())。

#1 楼

如果您只想跟踪指令以创建控制流程图(CFG)甚至是相当准确的数据流程图(DFG),那么与我们提供的工具相比,pyCommand无疑是笨拙的:

PLATFORM AGNOSTIC


pydbg(python)
顶盖反汇编(python,具有新增的污点分析支持)
Intel Pintools(C / C ++,比上述所有工具都快)
openREIL(高度实验性)

LINUX


perf(已经实现CFG创建的Linux内核模块)
valgrind / callgrind(callgrind为负责CFG创建)

请注意python解决方案比C / C ++解决方案要慢(但易于实现)。