pydbg使用笔记

设有

dbg = pydbg()

1.如果要调试的是console类型的程序,则create_new_console=True

dbg.load(target, create_new_console=True)

 

2.关于bp_set的参数restore

如果restore=True,则每次中断后会再次设置断点,这样下次还会再被中断。

如果restore=False,则每次中断后不会再次设置断点,这样就只中断一次。

可以这么理解,因为调试器在中断以后会在设置断点的地址上设置回原来的执行代码,如果restore为True,则会在断点处理以后,把这个位置再restore int 3指令。

不能把restore参数理解成,是否把断点还原成原来代码的意思,这样就和实际意思相反。

heap_free_count = 0

def heap_free_handler(dbg):
    global printf_count
    heap_free_count += 1
    print "enter heap free handler ", heap_free_count
    
    return DBG_CONTINUE


def entry_point_handler(dbg):
    print "enter the entry point"

    #resolve the function address
    func_addr = dbg.func_resolve("KERNEL32.dll",  "HeapFree")
    
    #test the different between set restore=True to set restore=False
    if func_addr:
        dbg.bp_set(func_addr, restore=True, handler=heap_free_handler)
    else:
        print "resolve printf failed"
    
    return DBG_CONTINUE

def main():
    target = r"F:\MYPROJECTS\Ex15\Debug\Ex15.exe"
    
    pe = pefile.PE(target)
    dbg = pydbg()
    
    #if it's a console program, so set create_new_console = True
    dbg.load(target, create_new_console=True)
    
    #set a break point at the entry point
    entry_point = pe.OPTIONAL_HEADER.AddressOfEntryPoint + pe.OPTIONAL_HEADER.ImageBase
    dbg.bp_set(entry_point, handler=entry_point_handler)
        
    dbg.run()


当restore=True,则输出

enter the entry point
enter heap free handler  1
enter heap free handler  2
enter heap free handler  3


当restore=False,则输出

 

enter the entry pointenter heap free handler  1

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值