DLL注入学习笔记(2)
2019-10-09 本文已影响0人
Ginkgo_Alkaid
紧接着上次笔记,这次要用程序调用上次写的dll里的函数,需要使用上次编译好的三个文件:Win32Project1.dll,Win32Project1.lib和Win32Project1.h
图片.png
首先新建一个MFC项目:
图片.png
下一步在应用程序类型上选择基于对话框,继续下一步直到创建成功:
图片.png控制下边框的大小,以及确定和取消的位置:
图片.png隐式链接
把三个文件复制到当前项目目录,双击确定,在头部加入调用声明
pragma comment ( lib,"xxx.lib" )
表示链接xxx.lib这个库,告诉编译器你要用到xxx.lib库
和在工程设置里写上链入xxx.lib的效果一样,不过这种方法写的 程序别人在使用你的代码的时候就不用再设置工程settings了。
图片.png
在点击确定的函数里添加上之前写好的dll的输出函数fnWin32Func();
图片.png
编译并把dll文件放到生成的exe目录中,运行程序,点击确定可以看到运行了dll的导出函数:
图片.png
显式链接
将头文件的函数声明前,加上extern “C” 表示这是一个C语言库函数,这样就不会有符号破碎的问题,由于C++的重载机制,不加函数就会被重命名
图片.png之后编写代码如下所示:
typedef int(*MyFunc)(void);
void CMFCApplication1Dlg::OnBnClickedOk()
{
// TODO: 在此添加控件通知处理程序代码
HMODULE hMod = LoadLibrary(_T("Win32Project1.dll"));
if(hMod){
MyFunc myFunc = (MyFunc)GetProcAddress("fnWin32Func");
myFunc();
FreeLibrary(hMod);
}
CDialogEx::OnOK();
}
编译并运行成功:
图片.png