我正在尝试使用ida-batch_decompile实现类似的功能。基本思想是从命令行注释和反编译目标(但它也带有菜单项;充当插件或 idascript)
它目前使用猜测的堆栈变量大小和外部参照的文本描述来注释函数。为此,它添加了一个带有SetFunctionCmt(addr, txtcomment, 0)
(见代码)的函数注释块,一旦所有函数都被注释,它将目标二进制文件反编译为伪代码(也可以选择反编译可解析的导入)。请注意,atm 无法注释反编译行,但我正在考虑将来使用它。
这是一个例子 dbghelp.c
//----- (03052800) --------------------------------------------------------
// **** Variables ****
// * stack size: 20
// {"diff_size": 4, "offset_text": "[bp+0h]", "size": 4, "name": " s", "offset": 0}
// {"diff_size": 4, "offset_text": "[bp+4h]", "size": 4, "name": " r", "offset": 4}
// {"diff_size": 4, "offset_text": "[bp+8h]", "size": 4, "name": "arg_0", "offset": 8}
// {"diff_size": 4, "offset_text": "[bp+Ch]", "size": 4, "name": "dwBytes", "offset": 12}
// {"diff_size": 4, "offset_text": "[bp+10h]", "size": 4, "name": "arg_8", "offset": 16}
// *******************
// ***** XREFS *****
// * # 1
// sub_30733D0+30
// *******************
int __stdcall sub_3052800(int a1, SIZE_T dwBytes, int a3)
{
int result; // eax@17
HANDLE v4; // eax@21
...