DLL怎么导出函数?
1.1 使用关键字_decslpec(dllexport)
1.2 使用def文件导出在函数前加extern "C" 起到什么作用?
2.1 禁用c++的名称粉碎机制一个软件,在不修改已有代码的前提下,如何加载新的DLL?
3.1 软件在启动时, 遍历指定文件夹找到所有的dll,并加载它们。
- 一个软件,在不修改已有代码的前提下,扩展新的功能
4.1 以插件的形式扩展新功能
4.1.1 调用软件带有的功能
4.1.2 提供导出函数供软件调用
4.2 以补丁的形式。
4.3 软件加载DLL时,如何识别DLL是为本软件编写的插件?
4.3.1 先加载DLL(不进行判断)
4.3.2 获取DLL指定的导出函数(如果获取失败,就可以说明dll不是本软件的插件)
4.3.3 调用dll的导出函数, 判断导出函数的返回值是否符合要求(要求可以是一个版本号,或者是TRUE和FALSE)。
4.4 当软件想要在特定场景下调用DLL的导出函数时,也会动态获取dll的导出函数,如果能获取到就调用,获取不到就不调用来的.
4.4.1 当软件希望它的一个功能能够被插件所扩展的时候,就可以在实现这个功能的时候调用dll的特定导出函数。
- 当一个加载DLL的exe不是自己编写的,但DLL是自己编写的,怎么调试DLL?
5.1 不直接调试dll,而是调试加载dll的exe
5.2 在vs的项目属性->调试->命令->设置为exe的路径
5.3 在vs的项目属性->调试->工作目录->设置为exe所在目录
OD插件的编写:
- 导入头文件和库文件
- 导出一个必选的函数: ODBG2_Pluginquery
OD的反调试插件:
- 导出一个必选的函数: ODBG2_Pluginquery
- 在被调试进程被加载到OD的时候,获取被调试进程的PEB的地址
然后将PEB.BeginDebug字段设置为0
x32dbg命令行显示peb/teb数据的插件:
- 导出3个必选的函数
- 在插件初始化函数中注册2个命令("pebaddr","tebaddr")
- 在命令的回调函数中获取peb和teb的地址,并调用x32dbg的api将将内存窗口转到peb/teb所在的地址。