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中执行此操作?
#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参数),以便能够看到其错误。一切正常后,请静默运行。
评论
您是否要获取GDL或寻找一种绘制图形的方法?我需要一个GDL