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
上一篇下一篇

猜你喜欢

热点阅读