-
-
[求助]如果我有 C++Builder 10.3(Delphi自带的)能开发OD插件吗?
-
发表于: 2019-8-6 05:48 3435
-
编译
要编译你自己的插件,你需要一个C或C++编译器(包含连接器和运行库),和插件接口(文件 plugin.h),它至少兼容于如下编译器:
?Borland's C++ 5.5 ?命令行编译器,可免费到www.borland.com下载(需要注册)
?Borland's C++ Builder 5 - BC++ 5.5的基础版
?Microsoft's Visual C++ 5.0 ?非常老但很稳定的VC版本
我并没有测试过其它编译器,如果你发现了不兼容,请你告诉我下,如果可能,请将正确的版本的plugin.h发给我,谢谢!
插件开发包包含两个功能简单的插件:bookmark,它允许在正在调试的应用程序中设置10个书签。和command line,它与命令行接口相通。插件本身就是一份很好的文档,你可以用它用为模板开发你自己的插件,它们都是自由软件,所以,你可能通过任何方式来修改它,就像是你自己的源代码一样。
如下编译器设置是很需要的,用来保证插件和 OllyDbg 正确通讯。适合于上面列出的编译器,plugin.h 将强制检查一些规则:
?应通过函数名输出所有回调函数,而不是序号。
?如果你用C++编译器,在回调函数中不能使用C++式命名(应该声明为extern "C");
?应该在所有API和回调函数强制为标准C风格参数传递(可声明参数传递风格为cdecl);
?在所有结构中强制为 BYTE 对齐,声明于 plugin.h中
?设置缺省字符类型为:UNSIGNED。
始终要记住,你从OllyDbg得到的所有指针必须为NULL,非常普遍的错误就是这个设置有问题。
你可以使用静态直接连接你的插件,否则,你的插件在不同版本的运行DLL之间可能不稳定。如果不必要,不要将你的插件分割到几个
DLL中,如果你需要的数据文件用户没有配置,可以尝试将数据直接移到你的插件或资源中。
要连接你的插件到OllyDbg,你还需要输入库ollydbg.lib。一些编译器(Borland)包含有实用小程序implib,它会扫描可执行文件并列出该库中所有的可用于打包的导出函数表。在其它产品中,像VC,能从定义(ollydbg.def)文件中产生输出表,相似的产品可以参考其具体的文档。
最后、必须特别提醒一下,不要浪费资源!不要导出不会用到的函数,那样是为了让你的程序跑的更快。OllyDbg当前版本只支持32个插件,如果每个插件花50ms去接受全局快捷键,又花50ms去接受窗口的快捷键……你明白我的意思了吗,嗯?
plug110.zip的内容
插件包文档包含如下文件:
根目录:
bookmark.c ?书签插件源代码
cmdexec.c ?命令行插件源代码
command.c ?命令行插件源代码
cmdline.rtf ?命令行插件帮助文件(.hlp)的RTF格式源代码(未编译成HLP文件)
ollydbg.def - OllyDbg导出函数定义文件,一些编译器在连接成ollydbg.lib时需要它
plugin.h ?插件接口定义的头文件
plugins.hlp ?本帮助文件
BC55文件夹:
sample.bpr - BCB 5工程文件,生成成sample.dll (同于bookmark.dll)
sample.cpp - sample.bpr的主文件
bookmark.mak - BC 5.5的make文件,生成bookmark.dll
cmdline.bpr - BCB 5工程文件,生成cmdline.dll
cmdline.cpp - cmdline.bpr的主文件
cmdline.mak - BC 5.5的make文件,生成cmdline.dll
ollydbg.lib - OllyDbg的OMF格式引入库
VC50文件夹:
bookmark.dsp - Visual Studio 97的工程文件,生成bookmark.dll
bookmark.dsw - Visual Studio 97的工程文件,生成bookmark.dll
bookmark.mak - VC 5.0的make文件,生成bookmark.dll
cmdline.dsp - Visual Studio 97的工程文件,生成 cmdline.dll
cmdline.dsw - Visual Studio 97的工程文件,生成 cmdline.dll
cmdline.mak - VC 5.0 的make文件,生成 cmdline.dll
ollydbg.lib - OllyDbg 的COFF 格式引入库
用BC5.5生成简单插件
用BC 5.5创建一个DLL项目,然后做如下工作
1. 复制文件 bookmark.c, cmdexec.c, command.c, plugin.h, bc55\bookmark.mak, bc55\cmdline.mak, bc55\ollydbg.lib到同一文件夹;
2. 假定你的BC 5.5 编译器安装于c:\bc55,键入如下命令:
c:\bc55\bin\make -f bookmark.mak
c:\bc55\bin\make -f cmdline.mak
3. 假如要写你自己的插件,在你的插件包中包含a.c , b.c 和资源 c.rc ,你需要重命名bookmark.mak 于 myplug.mak 中,并且把如下紧连的三行放于该MAK文件的顶端:
PROJECT = myplug.dll
OBJFILES = a.obj b.obj
RESFILES = c.rc
然后再执行命令:
c:\bc55\bin\make -f myplug.mak
用BCB 5生成简单插件
BCB 工程必须包含与C++程序命名一样的主工程文件且扩展名为.cpp ,正是因为此,书签插件创建并调用sample.dll ,当然,这不会对实际功能有什么影响。
要构建 sample.dll, 可按如下操作进行:
1. 复制文件 bookmark.c, plugin.h, bc55\sample.bpr, bc55\sample.cpp 和 bc55\ollydbg.lib 到同一目录下;
2. 在Builder和make工程中打开 sample.bpr。
要构建 cmdline.dll ,可照如下操作进行:
1. 复制文件 cmdexec.c, command.c, plugin.h, bc55\cmdline.bpr, bc55\cmdline.cpp 和 bc55\ollydbg.lib到同一目录;
2. 在Builder 和 make工程中打开 cmdline.bpr 。
用VC 5.0 构建命令行插件
要用VC 5.0构建命令行插件,可按如下操作进行:
1. 复制文件 bookmark.c, cmdexec.c, command.c, plugin.h, vc50\bookmark.mak, vc50\cmdline.mak 和 vc50\ollydbg.lib 到同一目录;
2. 在 .mak 文件, 编辑行
INCLUDE=c:\vc\include
LIBPATH=c:\vc\lib
这样它就指向了你的包含 include 和库 lib 夹。
3. 假定你的VC编译器; cl.exe, 和 make小程序, nmake.exe,都在c:\vc\bin中,执行如下命令:
c:\vc\bin\nmake -f bookmark.mak
c:\vc\bin\nmake -f cmdline.mak
用Visual Studio生成简单插件
要构建 bookmark.dll:
1. 复制文件 bookmark.c, plugin.h, vc50\bookmark.dsp, vc50\bookmark.dsw 和 vc50\ollydbg.lib 到同一目录下:
2. 在Visual Studio中打开并编译工程 bookmark 。
要构建 cmdline.dll:
1. 复制文件 cmdexec.c, command.c, plugin.h, vc50\cmdline.dsp, vc50\cmdline.dsw 和 vc50\ollydbg.lib 到同一目录下;
2. 在Visual Studio 中打开并编译工程 cmdline 。
要编译你自己的插件,你需要一个C或C++编译器(包含连接器和运行库),和插件接口(文件 plugin.h),它至少兼容于如下编译器:
?Borland's C++ 5.5 ?命令行编译器,可免费到www.borland.com下载(需要注册)
?Borland's C++ Builder 5 - BC++ 5.5的基础版
?Microsoft's Visual C++ 5.0 ?非常老但很稳定的VC版本
我并没有测试过其它编译器,如果你发现了不兼容,请你告诉我下,如果可能,请将正确的版本的plugin.h发给我,谢谢!
插件开发包包含两个功能简单的插件:bookmark,它允许在正在调试的应用程序中设置10个书签。和command line,它与命令行接口相通。插件本身就是一份很好的文档,你可以用它用为模板开发你自己的插件,它们都是自由软件,所以,你可能通过任何方式来修改它,就像是你自己的源代码一样。
如下编译器设置是很需要的,用来保证插件和 OllyDbg 正确通讯。适合于上面列出的编译器,plugin.h 将强制检查一些规则:
?应通过函数名输出所有回调函数,而不是序号。
?如果你用C++编译器,在回调函数中不能使用C++式命名(应该声明为extern "C");
?应该在所有API和回调函数强制为标准C风格参数传递(可声明参数传递风格为cdecl);
?在所有结构中强制为 BYTE 对齐,声明于 plugin.h中
?设置缺省字符类型为:UNSIGNED。
始终要记住,你从OllyDbg得到的所有指针必须为NULL,非常普遍的错误就是这个设置有问题。
你可以使用静态直接连接你的插件,否则,你的插件在不同版本的运行DLL之间可能不稳定。如果不必要,不要将你的插件分割到几个
DLL中,如果你需要的数据文件用户没有配置,可以尝试将数据直接移到你的插件或资源中。
要连接你的插件到OllyDbg,你还需要输入库ollydbg.lib。一些编译器(Borland)包含有实用小程序implib,它会扫描可执行文件并列出该库中所有的可用于打包的导出函数表。在其它产品中,像VC,能从定义(ollydbg.def)文件中产生输出表,相似的产品可以参考其具体的文档。
最后、必须特别提醒一下,不要浪费资源!不要导出不会用到的函数,那样是为了让你的程序跑的更快。OllyDbg当前版本只支持32个插件,如果每个插件花50ms去接受全局快捷键,又花50ms去接受窗口的快捷键……你明白我的意思了吗,嗯?
plug110.zip的内容
插件包文档包含如下文件:
根目录:
bookmark.c ?书签插件源代码
cmdexec.c ?命令行插件源代码
command.c ?命令行插件源代码
cmdline.rtf ?命令行插件帮助文件(.hlp)的RTF格式源代码(未编译成HLP文件)
ollydbg.def - OllyDbg导出函数定义文件,一些编译器在连接成ollydbg.lib时需要它
plugin.h ?插件接口定义的头文件
plugins.hlp ?本帮助文件
BC55文件夹:
sample.bpr - BCB 5工程文件,生成成sample.dll (同于bookmark.dll)
sample.cpp - sample.bpr的主文件
bookmark.mak - BC 5.5的make文件,生成bookmark.dll
cmdline.bpr - BCB 5工程文件,生成cmdline.dll
cmdline.cpp - cmdline.bpr的主文件
cmdline.mak - BC 5.5的make文件,生成cmdline.dll
ollydbg.lib - OllyDbg的OMF格式引入库
VC50文件夹:
bookmark.dsp - Visual Studio 97的工程文件,生成bookmark.dll
bookmark.dsw - Visual Studio 97的工程文件,生成bookmark.dll
bookmark.mak - VC 5.0的make文件,生成bookmark.dll
cmdline.dsp - Visual Studio 97的工程文件,生成 cmdline.dll
cmdline.dsw - Visual Studio 97的工程文件,生成 cmdline.dll
cmdline.mak - VC 5.0 的make文件,生成 cmdline.dll
ollydbg.lib - OllyDbg 的COFF 格式引入库
用BC5.5生成简单插件
用BC 5.5创建一个DLL项目,然后做如下工作
1. 复制文件 bookmark.c, cmdexec.c, command.c, plugin.h, bc55\bookmark.mak, bc55\cmdline.mak, bc55\ollydbg.lib到同一文件夹;
2. 假定你的BC 5.5 编译器安装于c:\bc55,键入如下命令:
c:\bc55\bin\make -f bookmark.mak
c:\bc55\bin\make -f cmdline.mak
3. 假如要写你自己的插件,在你的插件包中包含a.c , b.c 和资源 c.rc ,你需要重命名bookmark.mak 于 myplug.mak 中,并且把如下紧连的三行放于该MAK文件的顶端:
PROJECT = myplug.dll
OBJFILES = a.obj b.obj
RESFILES = c.rc
然后再执行命令:
c:\bc55\bin\make -f myplug.mak
用BCB 5生成简单插件
BCB 工程必须包含与C++程序命名一样的主工程文件且扩展名为.cpp ,正是因为此,书签插件创建并调用sample.dll ,当然,这不会对实际功能有什么影响。
要构建 sample.dll, 可按如下操作进行:
1. 复制文件 bookmark.c, plugin.h, bc55\sample.bpr, bc55\sample.cpp 和 bc55\ollydbg.lib 到同一目录下;
2. 在Builder和make工程中打开 sample.bpr。
要构建 cmdline.dll ,可照如下操作进行:
1. 复制文件 cmdexec.c, command.c, plugin.h, bc55\cmdline.bpr, bc55\cmdline.cpp 和 bc55\ollydbg.lib到同一目录;
2. 在Builder 和 make工程中打开 cmdline.bpr 。
用VC 5.0 构建命令行插件
要用VC 5.0构建命令行插件,可按如下操作进行:
1. 复制文件 bookmark.c, cmdexec.c, command.c, plugin.h, vc50\bookmark.mak, vc50\cmdline.mak 和 vc50\ollydbg.lib 到同一目录;
2. 在 .mak 文件, 编辑行
INCLUDE=c:\vc\include
LIBPATH=c:\vc\lib
这样它就指向了你的包含 include 和库 lib 夹。
3. 假定你的VC编译器; cl.exe, 和 make小程序, nmake.exe,都在c:\vc\bin中,执行如下命令:
c:\vc\bin\nmake -f bookmark.mak
c:\vc\bin\nmake -f cmdline.mak
用Visual Studio生成简单插件
要构建 bookmark.dll:
1. 复制文件 bookmark.c, plugin.h, vc50\bookmark.dsp, vc50\bookmark.dsw 和 vc50\ollydbg.lib 到同一目录下:
2. 在Visual Studio中打开并编译工程 bookmark 。
要构建 cmdline.dll:
1. 复制文件 cmdexec.c, command.c, plugin.h, vc50\cmdline.dsp, vc50\cmdline.dsw 和 vc50\ollydbg.lib 到同一目录下;
2. 在Visual Studio 中打开并编译工程 cmdline 。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: