是否有关于如何使插件与 IDA 5.0 免费配合使用的教程?
针对普通 SDK 库构建的插件不起作用,因为免费 IDA 的 WLL 按序而不是按名称导出所有内容。我与微软的 LIB 工具争论不休,从 .def 文件中为一些函数制作了一个合适的导入库,但现在 IDA 说“不是 IDA DLL 文件”......
另外,是否有免费的 IDA 5.0 的 .DEF 文件或 VC++ 导入库?
是否有关于如何使插件与 IDA 5.0 免费配合使用的教程?
针对普通 SDK 库构建的插件不起作用,因为免费 IDA 的 WLL 按序而不是按名称导出所有内容。我与微软的 LIB 工具争论不休,从 .def 文件中为一些函数制作了一个合适的导入库,但现在 IDA 说“不是 IDA DLL 文件”......
另外,是否有免费的 IDA 5.0 的 .DEF 文件或 VC++ 导入库?
我找到了插件不起作用的原因:PLUGIN 符号没有从 dll (.plw) 中导出。
在 5.1 版之前的标头中,符号未声明为 __declspec(dllexport),这意味着它必须通过 .DEF 文件导出,或者必须使用变通方法以便符号定义可以在 __declspec(dllexport) 中进行,尽管有错误标题中的声明:
#define PLUGIN sCaPeGoAt_PLUGIN
#include "loader.hpp" // plugin_t, PLUGIN_KEEP etc.
#undef PLUGIN
extern "C"
__declspec(dllexport)
plugin_t PLUGIN =
{
IDP_INTERFACE_VERSION,
...
};
由于替罪羊吸收了错误的声明,VC++ 接受定义上的 __declspec(dllexport) 并编译它。现在该插件在 IDA 5.0 免费版中运行良好......如果没有修复,构建将停止并显示以下消息:
error C2370: 'PLUGIN' : redefinition; different storage class
但是,获得像样的 .DEF 或 .LIB 的问题仍然存在。反转 WLL 以识别序数背后的功能有点麻烦且进展缓慢......周围有免费的 IDA 插件,因此库必须在某个地方(除非它们是根据禁言协议获得的)。
更新:对于 VC++,有一个更简单的方法来完成同样的事情,没有邪恶的宏技巧:
#pragma comment (linker, "/export:PLUGIN=_PLUGIN")
或者干脆
#pragma comment (linker, "/export:_PLUGIN")
因为前导下划线似乎会自动剥离。