// Odb2插件.cpp : 定义 DLL 应用程序的导出函数。
//
#include “stdafx.h”
#include “Odb2插件.h”
#include “..\\Odb2插件\\OllyDBG_Plugin2\\plugin.h”
#pragma comment(lib,”..\\Odb2插件\\OllyDBG_Plugin2\\ollydbg.lib”)
#include
#include
#include “resource.h”
#include
#define PLUGINNAME L”Tennn”
#define MY_PLUGIN L”1.0″
t_table g_Tennn={0};
extern HMODULE g_hModule;
//插件信息查询函数
extc INT __cdecl ODBG2_Pluginquery(int ollydbgversion,ulong *features,
wchar_t pluginname[SHORTNAME],
wchar_t pluginversion[SHORTNAME])
{
//检查Olldbg版本
if (ollydbgversion<201)
{
return 0;
}
//设置Olldbg插件名称与版本
StringCchCopy(pluginname,SHORTNAME,PLUGINNAME);//设置插件名称
StringCchCopy(pluginversion,SHORTNAME,MY_PLUGIN);//设置插件版本
//返回需要的API版本
return PLUGIN_VERSION;
}
INT_PTR CALLBACK RightClickMenu1(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;
case WM_COMMAND:
{
case IDC_BUTTON1:
MessageBox(0,0,0,0);
EndDialog(hDlg, LOWORD(wParam));
}
break;
}
return (INT_PTR)FALSE;
}
HWND g_hwnd;
//插件初始化函数
extc int __cdecl ODBG2_Plugininit(void)
{
MessageBox(0,L”Hello Pediy”,0,0);
HWND hParent=GetActiveWindow();
LPCWSTR lpDlgID=MAKEINTRESOURCE(IDD_DIALOG1);
g_hwnd=CreateDialog(g_hModule,lpDlgID,hParent,(DLGPROC)RightClickMenu1);
return 0;
}
//插件重置函数
extc void __cdecl ODBG2_Pluginreset(void)
{
Deletesorteddatarange(&(g_Tennn.sorted),0,0xFFFFFFFF);
}
//插件关闭函数
extc int __cdecl ODBG2_Pluginclose(void)
{
Writetoini(NULL,PLUGINNAME,L”Restore”,L”%i”,g_Tennn.hw!=NULL);
return 0;
}
//插件销毁函数
extc void __cdecl ODBG2_Plugindestroy(void)
{
Destroysorteddata(&(g_Tennn.sorted));
}
//主菜单1响应
static int MenuFun1(t_table *pt,wchar_t *name,ulong index,int mode)
{
if (mode==MENU_VERIFY)
{
// MessageBox(0,L”MENU_NORMAL11111″,0,0);
return MENU_NORMAL;
}
if (mode==MENU_EXECUTE)
{
MessageBox(0,L”MENU_NOREDRAW11111″,0,0);
return MENU_NOREDRAW;
}
return MENU_ABSENT;
}
//主菜单2响应
static int MenuFun2(t_table *pt,wchar_t *name,ulong index,int mode)
{
if (mode==MENU_VERIFY)
{
// MessageBox(0,L”MENU_NORMAL22222″,0,0);
return MENU_NORMAL;
}
if (mode==MENU_EXECUTE)
{
MessageBox(0,L”MENU_NOREDRAW22222″,0,0);
return MENU_NOREDRAW;
}
return MENU_ABSENT;
}
static t_menu g_stcMainMenu[]={
{
L”主菜单1″,
L”主菜单”,
K_NONE,MenuFun1,NULL,0
},
{
L”主菜单2″,
L”主菜单”,
K_NONE,MenuFun2,NULL,1
},
{
NULL,NULL,K_NONE,NULL,NULL,0
}
};
static int RightClickMenu1(t_table *pt,wchar_t *name,ulong index,int mode)
{
//第一次调用 执行初始化操作
if (mode==MENU_VERIFY)
{
// MessageBox(0,L”MENU_NORMAL11111″,0,0);
return MENU_NORMAL;
}
//第二次调用 执行菜单逻辑操作
if (mode==MENU_EXECUTE)
{
MessageBox(0,L”MENU_NOREDRAW11111″,0,0);
ShowWindow(g_hwnd,SW_SHOW);
return MENU_NOREDRAW;
}
return MENU_ABSENT;
}
static int RightClickMenu2(t_table *pt,wchar_t *name,ulong index,int mode)
{
if (mode==MENU_VERIFY)
{
// MessageBox(0,L”MENU_NORMAL22222″,0,0);
return MENU_NORMAL;
}
if (mode==MENU_EXECUTE)
{
MessageBox(0,L”MENU_NOREDRAW22222″,0,0);
return MENU_NOREDRAW;
}
return MENU_ABSENT;
}
static t_menu g_stcRightClickMenu[]={
{
L”右键菜单1111″,
L”右键”,
KK_DIRECT | KK_CTRL | ‘A’,RightClickMenu1,NULL,0},
{
L”右键菜单2222″,
L”右键”,
KK_DIRECT | KK_CTRL | ‘C’,RightClickMenu2,NULL,1},
{
NULL,NULL,K_NONE,NULL,NULL,0
}
};
extc t_menu* __cdecl ODBG2_Pluginmenu(wchar_t *type)
{
//判断是否为主菜单请求
if (!wcscmp(type,PWM_MAIN))
{
return g_stcMainMenu;
}
//判断是否为CPU窗口右键菜单请求
if (!wcscmp(type,PWM_DISASM))
{
return g_stcRightClickMenu;
}
return NULL;
}
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224452.html原文链接:https://javaforall.net
