第五课 OD插件开发
插件编写:
(1). 设置编译器。打开VC++6.0新建一个Win32 Dynamic-Link Library工程,把Plugin.h头文件加到工程中来,在.cpp文件中include Plugin.h头文件。然后ALT+F7打开Project->Settings,在C/C++选项卡的最下面Project Options里加上“/J”(没有引号),就是将缺省的char类型设置为unsigned(Set default char type to unsigned)。(注意大小写/J)
把OllyDbg.lib文件加到Resource Files里面。
(2) 在编译链接过程中出现LNK2001错误可将Plugin.h头文件中的API函数名称前加下划线"_"即可。
(3) 编写OD插件的必要元素:
int ODBG_Plugindata(char *shortname);
shortname - 32个字节的字符指针,buffer内容为我们要编写的插件名称,此名称用来显示在OD的插件菜单里面。
extc int _export cdecl ODBG_Plugindata(char shortname[32])
{
strcpy(shortname, g_szPluginName);
return PLUGIN_VERSION;
}
int ODBG_Plugininit(int ollydbgversion,HWND hw,ulong *features);
ollydbgversion - 看名字就知道了,OD的版本号;
hw - OD主窗口的句柄;
features - 保留。
extc int _export ODBG_Plugininit(int ollydbgversion,HWND hw,ulong *features)
{
HOD=hw;
return 0;
}
在你的程序中编写完这两个回调函数,你就可以在OD的插件菜单里看到你自己的插件的名称了。
(4) 编写插件的子菜单的显示
ODBG_Pluginmenu(int origin,char data[4096],void *item);
origin - 调用该回调函数的窗口编号。具体值请参考API手册,举例来说,PM_MAIN,子菜单显示在主窗口的插件菜单中,PM_DISASM, 子菜单显示在反汇编窗口中。
data - 子菜单显示的字符串,具体格式请参考API手册;
item - 指向窗口中显示的和被选中的数据,可以为NULL。
extc int _export cdecl ODBG_Pluginmenu(int origin, char data[4096], void *item)
{
if (origin == PM_MAIN)
{
strcpy(data, "0 OD, | 1 关于");
return 1;
}
return 0;
}
ODBG_Pluginaction(int origin, int action, void *item);
origin - 上面介绍过了;
action - 菜单的ID;
item - 同上。
回调函数中用switch (action)来分类各个菜单ID并添加响应代码。