IDA plugin C++ calls Python

IDA插件C++调用Python模块

背景

不科普,具体问题参考http://www.hexblog.com/?p=788

实现

基础工作

blog中写的比较清楚
使用

PyGILState_STATE state = PyGILState_Ensure();
RunPyCode(cmd);
PyGILState_Release(state);

主要是PyGILState_Ensure和PyGILState_Release两个函数,与普通的C++调用Python方法不一样。当然还需要init,

if (!Py_IsInitialized())
    Py_InitializeEx(0 /* Don't catch SIGPIPE, SIGXFZ, SIGXFSZ & SIGINT signals */);

init在插件的init函数中添加,运行py代码在run函数或者插件代码的任何位置添加都行。

加载模块

能够调用py代码,自然需要调用py模块,标准写法如下

PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
PyObject *pName,*pModule,*pDict,*pFunc,*pArgs;
pName = PyString_FromString("module_name");  
pModule = PyImport_Import(pName);
if (!pModule) {
    msg("can't find analysis.py\n");
}

但是运行时py脚本到底应该放在哪呢?
经测,如上写法需要放在被测程序所在目录中。
实际上只需要把文件路径添加在sys.path中就行了,然而在写的时候忽略了转义,实际非常简单。。。
so much

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值