首页
社区
课程
招聘
[原创]科普文之如何编写ollydbg插件
发表于: 2015-11-25 22:31 11284

[原创]科普文之如何编写ollydbg插件

2015-11-25 22:31
11284
#include <windows.h>
#include "Plugin.h"
/************************************************************************
函数名称:_ODBG_Plugindata
函数功能:设置插件的名字
参    数:shortname  插件名字
返 回 值:ollydbg版本号
备    注:必须存在的函数之一
************************************************************************/
extc int  _export cdecl _ODBG_Plugindata(char shortname[32])
{
    strcpy_s(shortname, 32, "掮客酒馆插件");
    return PLUGIN_VERSION;
}
/************************************************************************
函数名称:_ODBG_Plugininit
函数功能:初始化插件
参  数 1:ollydbgversion 当前OD的版本
参  数 2:hw ollydbg主窗口的句柄
参  数 3:features 拓展,暂时无用
返 回 值:正常返回null,异常返回-1
备    注:必须存在的函数之一
************************************************************************/
extc int  _export cdecl _ODBG_Plugininit(int ollydbgversion, HWND hw, ulong *features)
{
    //检查插件版本与调试器版本是否兼容
    if (ollydbgversion < PLUGIN_VERSION)
    {
        return -1;
    }
    return 0;
}
/************************************************************************
函数名称:_ODBG_Pluginmenu
函数功能:添加菜单
参  数 1:origin 用户点击的菜单下标
参  数 2:data   子菜单名称缓冲区
参  数 3:item   菜单数量
返 回 值:正常返回TRUE,异常返回FALSE
备    注:每个菜单项之间用'|'字符隔开
************************************************************************/
extc int  _export cdecl _ODBG_Pluginmenu(int origin, char data[4096], void *item)
{
    //检查是否点击子菜单
    if (origin == PM_MAIN)
    {
        strcpy_s(data, 4096, "0 &Msg |1 &www.jmpoep.com |2 &About");
    }
    return TRUE;
}
/************************************************************************
函数名称:_ODBG_Pluginaction
函数功能:响应菜单事件
参  数 1:origin 用户点击的菜单下标
参  数 2:action 点击的子菜单下标
参  数 2:item 菜单数量
返 回 值:无
************************************************************************/
extc void _export cdecl _ODBG_Pluginaction(int origin, int action, void *item)
{
    //检查是否点击子菜单
    if (origin != PM_MAIN)
    {
        return;
    }
    switch (action)
    {
    case 0:
        MessageBox(NULL, TEXT("掮客酒馆"), TEXT("提示"), MB_OK);
        break;
    case 1:
        ShellExecute(NULL, TEXT("open"), TEXT("http://www.jmpoep.com"), NULL, NULL, SW_SHOW);
        break;
    case 2:
        MessageBox(NULL, TEXT("Code By B1nGzL"), TEXT("提示"), MB_OK);
        break;
    default:
        break;
    }
}
BOOL WINAPI DllMain(HANDLE hInst, ULONG ul_reason_for_call, LPVOID lpReserved)
{
    return TRUE;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 3
支持
分享
最新回复 (9)
雪    币: 10665
活跃值: (3574)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
谢谢楼主分享
2015-11-25 22:46
0
雪    币: 3279
活跃值: (1997)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
文章写的不错,就是带有网站宣传。
2015-11-26 09:05
0
雪    币: 60
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
打的一手好广告~ :)
2015-11-26 10:18
0
雪    币: 6
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢楼主分享技术贴。
2015-11-26 13:06
0
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
路过 必须学习一下
2015-11-26 13:17
0
雪    币: 36
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
结合着“http://bbs.pediy.com/showthread.php?t=107389”看会更容易理解,当然后者写的已经很好了。
2015-11-26 16:41
0
雪    币: 12348
活跃值: (5113)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
看懂一点点了,多谢楼主
2015-11-26 21:45
0
雪    币: 30
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
写的不错, 值得学习~
2015-12-1 20:42
0
雪    币: 14
活跃值: (32)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
正好差这个教程。收藏先。
2015-12-12 11:27
0
游客
登录 | 注册 方可回帖
返回
//