看一下idaapi公开的功能,我发现下面的功能也公开了。使用脚本对hex-rays反编译器进行注释。我四处张望,找不到使用这些功能的示例。

[EDIT]

set_user_cmt似乎有2个参数,其中第二个是注释,第一个是treeloc_t的实例。但是,我不太确定如何使用它。使用以下内容会导致孤立的注释。

get_user_cmt
set_user_cmt
save_user_cmts


评论

要求他们的支持以提供示例吗?

我不太确定它是否能回答您的问题,但可能会给您一些指导:github.com/idapython/src/blob/master/examples/vds4.py

仅供参考:您可能会在hexrays.hpp文件hexrays.hpp文件:hex-rays.com/products/decompiler/manual/sdk/…中找到有关treeloc_t的更多信息。我很乐意提供更完整的解决方案,但不幸的是我现在没有工作的十六进制射线。

#1 楼

treeloc_t构造函数不接受EA,您需要指定注释精确度:

ea = idaapi.get_screen_ea()
cfunc = idaapi.decompile(ea)
tl = idaapi.treeloc_t()
tl.ea = ea
tl.itp = idaapi.ITP_SEMI
cfunc.set_user_cmt(tl, "Test comment")
cfunc.save_user_cmts()


您可以在hexrays.hpp中找到有关精确度的更多信息。并非所有精确器都能在任何地方工作。例如,上面的代码使用ITP_SEMI,它在分号后加注释:如果在if上使用它将引起孤立的注释。

#2 楼

我正在尝试使用ida-batch_decompile实现类似的功能。基本思想是从命令行对目标进行注释和反编译(但它也带有菜单项;用作插件或idascript)。

当前它使用文本猜测的堆栈变量大小对函数进行注释。和外部参照。为此,它将添加带有SetFunctionCmt(addr, txtcomment, 0)的功能注释块(请参见代码),并且在对所有功能进行注释后,它将目标二进制文件反编译为伪代码(可选地还反编译可解析的导入文件)。请注意,atm不能注释反编译的行,但我希望将来能使用它。

#3 楼

您可以使用idc.MakeComm或idc.MakeRptCmt函数。例如:

MakeComm(address, 'My comment')


评论


我不认为这可用于对Hex-Rays反编译应用评论。

–詹森·格夫纳(Jason Geffner)
16年4月19日在13:35