#1 楼
到目前为止,没有一个答案可以回答实际的问题。调试器插件与“正常”插件有两点不同:
插件标志中的
PLUGIN_DBG
。在init()中,必须将全局变量dbg
设置为指向debugger_t
结构实现的指针。有关定义,请参见idd.hpp
。有关示例,请参见SDK中的
plugins/debugger
,以及最近更新的idados
插件。警告:制作调试器插件不适合胆小的人。#2 楼
您可以在此处查找C / C ++中的IDA插件手册。此外,您还可以在SecurityTube的Recon 2008“为IDA PRO构建插件”中观看IDA-Pro Creator Ilfak Guilfanov的谈话。 br />
还有IDAPython也可以创建小型自动化。
#3 楼
idapython套件中的debughook.py示例脚本说明了可以由调试器插件处理的所有调试事件。当您使用调试器跟踪它们时。首先调用refresh_debugger_memory()(请参阅idc.py中有关RefreshDebuggerMemory()的文件注释)。如果可以,请避免该调用,因为它有点贵。您可以通过idautils包中的cpu实例轻松访问所有寄存器: br />要从堆栈顶部读取当前值,请使用诸如
# Simple script that colorizes all instruction the debugger halts at or
# the user traces with the debugger in yellow. Instruction that are hit
# a ssecond time are colored in red.
from idaapi import *
from idc import *
class Colorizer(DBG_Hooks):
def __init__(self):
DBG_Hooks.__init__(self)
self.locations_ = set()
def colorize(self, ea):
if ea in self.locations_:
SetColor(ea, CIC_ITEM, 0x2020c0)
else:
SetColor(ea, CIC_ITEM, 0x80ffff)
self.locations_.add(ea)
def dbg_bpt(self, tid, ea):
self.colorize(ea)
return 0
def dbg_step_into(self):
self.colorize(GetRegValue("eip"))
try:
if debughook:
print("Removing previous hook ...")
debughook.unhook()
except:
pass
colorizer = Colorizer()
colorizer.hook()
评论
我已经拥有有关IDA插件编写的资源-我正在寻找描述IDA调试器API的资源。
– dingo_kinznerhook
13年4月22日在20:04
@DenisLaskov:三年半前,当我参加IDA培训时,Elias告诉我们,Python现在也可以用来编写插件和加载器,因此“小型自动化”有点轻描淡写了;)
– 0xC0000022L♦
13年4月22日在23:04
@ 0xC0000022L :)您完全正确,我忘了在'automation'周围加上引号:)
–丹尼斯·拉斯科夫(Denis Laskov)
13年4月23日在3:58