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

你可能感兴趣的:(程序分析)