我想从Ida pro生成调用图,但我想自动执行。我写了这两个脚本,但是它们没有用。

1:

#include ida.idc;
#include idc.idc;
static main()
{
cur = MinEA()
end = MaxEA()
auto str_gdlpath;
str_gdlpath = GetIdbPath();
str_gdlpath = substr(str_gdlpath,0,strlen(str_gdlpath)-4)+".gdl";
GenCallGdl(str_gdlpath, "Call Gdl",cur, end, CHART_WINGRAPH);
Message("Gdl file have been saved to %s",str_gdlpath);
}


2:

#include ida.idc;
#include idc.idc;
static main ()
 {
 auto str_gdlpath;
 str_gdlpath = GetIdbPath ();
 str_gdlpath = substr (str_gdlpath, 0, strlen (str_gdlpath) - 4) + ".gdl";
 GenCallGdl (str_gdlpath, "Call Gdl", CHART_WINGRAPH);
 Message ("Gdl file have been saved to% s", str_gdlpath);
 } 


我要运行的命令是:

./idal -c -A -Sgdlscript.idc test.exe


是否也可以在IDAPython中执行此操作?

评论

您是否要获取GDL或寻找一种绘制图形的方法?

我需要一个GDL

#1 楼

IDC的大多数功能由IDA的idc.py模块提供。您可以在此处阅读文档。

以下代码应与IDC的工作方式相同:

import idc

cur = idc.MinEA()
end = idc.MaxEA()
path = idc.GetIdbPath().rsplit('.')[0] + '.gdl'
idc.GenCallGdl(path, 'Call Gdl', idc.CHART_GEN_GDL)
idc.Message('Gdl file has been saved to {}\n'.format(path))


评论


我做到了我没有任何问题,但是找不到生成的文件?生成文件的位置在哪里?我也在搜寻,但没有找到

–本·理查兹(Ben Richards)
15年7月16日在21:46



应该在IDB旁边。不行吗您可以尝试在IDA内运行它,而不使用命令行。

–TMR232
15年7月16日在21:50



这是行不通的。我需要在ida之外运行它。为什么它不起作用?即使在IDA内也不起作用

–本·理查兹(Ben Richards)
15年7月16日在21:59



我不确定。我目前没有IDA可以检查。会在周日尝试给出更好的答案。现在,如果NetworkX图足够好(它可以导出为多种格式,但我认为它不支持GDL),则可以使用Sark来实现。

–TMR232
15年7月16日在22:05



tnx。我会等着你。 NetworkX不支持GDL。

–本·理查兹(Ben Richards)
15年7月16日在22:19

#2 楼

以下内容对我有用:

#include "ida.idc";
#include "idc.idc";   
static main()
{
    auto retval;
    auto cur;
    auto end;
    auto str_gdlpath;
    cur = MinEA();
    end = MaxEA();
    //str_gdlpath = GetIdbPath();
    //str_gdlpath = substr(str_gdlpath,0,strlen(str_gdlpath)-4)+".gdl";
    str_gdlpath = "D:\temp\callgraph";
    retval = GenFuncGdl(str_gdlpath, "Call Gdl",cur, end, CHART_NOLIBFUNCS);

    //necessary for ida to exit in batch mode
    exit(0);
}


和命令行:

D:\temp>"C:\Program Files (x86)\IDA\idaw" -c -A -SD:\temp\autogengraph2.idc D:\temp\testdll.dll > NUL


尾随的NUL是必需的在不显示ida的情况下运行批处理。请注意,在idc脚本中,ida必须由exit()终止,以使脚本返回命令提示符。

GenCallGdl函数也可以工作,但文档与该函数使用的参数少于Ida帮助指示的参数。

在输出文件中,.gdl扩展名会自动附加。由于我没有独立的.gdl阅读器,因此如果显示正确的图形,我将无法控制输出文件。

作为调试此类文件的一般规则,首先让Ida在运行时显示cmdline批处理(即,没有-c -A参数),以便能够看到其错误。一切正常后,请静默运行。