我使用的命令是:
idaq64 -c -A -S"myscrip.py arg1" thebinpath.
这里是演示脚本
myscript.py
:import sys
if len(sys.argv) >= 2:
print("Successfully received parameters: " + str(sys.argv))
else:
print("Failed receiving parameters!!")
我显然希望python脚本以“ arg1”作为唯一参数打印“成功接收参数”语句,但是“接收参数失败! !”而是打印出来。
出于某种未知的原因,
sys.argv
只有一个字符串(myscript.py
)。我想可能还有另一种获取这些参数的方法,对吗?
#1 楼
大约三年过去了,这个相对简单的问题仍然缺乏正确的答案。今天使用IDA 7.0遇到相同的问题,我不妨花时间提供正确的答案。引用IDA帮助文件
-S###
打开数据库时执行脚本文件。
脚本文件扩展名用于确定哪个extlang将运行脚本。
可以在脚本名称之后传递命令行参数。
例如:
-S"myscript.idc argument1 \"argument 2\" argument3"
传递的参数存储在
ARGV
全局IDC变量中。使用ARGV.count
确定参数数量。第一个参数ARGV[0]
包含脚本名称上面引用的文档为IDC脚本语言提供了一个明确的示例,但让我们插值/猜测是什么与IDAPython等效。 >
自然,人们可能会假设idc的
ARGV
参数将被转换为python众所周知的sys.argv
,该文件正好用于大多数python文件中,因为有充分的文献记载可保存运行脚本时提供的命令行参数。 名称的相似性也使我迷惑,但是由于在IDA中如何执行python脚本,因此上述文档也应在python中按字面意义处理。使用
ARGV
标志执行的IDA python脚本只能访问-S
的位置参数。在IDA python中,它不能用作全局参数,但应通过
idc
模块进行访问。 这是一个简单的示例;
给出了以下
myscript.py
文件:import sys, idc
print("Sys args: " + str(sys.argv))
print("Idc args: " + str(idc.ARGV))
执行以下命令(忽略通常的IDA标语):
ida64 -A -S"myscript.py" arg1 "arg one and a half" arg2 -L/some/other/flags/logfile.txt -t
将得到以下输出:
Sys args: []
Idc args: ["arg1", "arg one and a half", "arg2"]
评论
我在IDAPython脚本中的参数方面也遇到了问题。我的建议(这是我的工作原理)是使用环境变量,例如:SOME_VAR = value idaq64 -A -S“ script.py” binary谢谢您的回复。后来我找到了另一种解决方案。 python参数似乎存储在idc.ARGV中。所以我只使用idc.ARGV来测试参数。