简写 | 全称 |
---|---|
DLL | Dynamic Link Library |
PE | Portable Executable |
COM | Component Object Model |
COFF | Common Object File Format |
DLL
动态链接库 ,PE
源于Unix COFF文件。
在powershell
查看可执行后缀名
$env:PATHEXT
#.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.CPL
dll不能直接运行,用rundll32
和 regsvr32
调用dll中的函数
rundll32 shell32.dll,Control_RunDLL #控制面板
rundll32 CreatDLL,ShowDlg
regsvr32 /s regsvr32 /s CreatDLL.dll
regsvr32 /u /s CreatDLL.dll
系统中的dll文件
Kernel32.dll #包含用于管理内存\进程和线程的各个函数
User32.dll #包含用于执行用户界面任务(如窗口的创建和消息的传送)的各个函数
GDI32.dll #包含用于画图和显示文本的各个函数
ComDlg32.dll #包含常用对话框(如File Open和File Save)
ComCtl32.dll #支持所有的常用窗口控件
VC++ 6.0/Visual Studio
这里只介绍Non-MFC DLL
,导出函数为标准的C接口,能被一般程序所调用
Win32 Dynamic-Link Library
工程,项目名称PrintDll
,添加C++源文件PrintDll.cpp
,内容如下:extern "C" _declspec(dllexport) void print();
#include
//#include "stdafx.h"
void print()
{
MessageBox(NULL,"content","title",MB_OK);
}
MessageBox
原型
int MessageBox(
HWND hWnd,
LPCWSTR lpText,
LPCWSTR lpCaption,
UINT uType);
#hWnd 是指向父窗口的句柄,如果没有父窗口,可以把这个参数设置为 NULL
#lpText 是需要显示的文字。显示字符串的起始地址
#lpCaption 是在窗口上标题显示。
#uType 是窗口组合按钮和显示图标的类型
比普通C添加了extern "C" _declspec(dllexport)
字段和导出函数
编译生成dll文件后,在项目Debug目录下有PrintDll.dll
文件,shift + 右键
打开cmd/powershell(win10),运行
rundll32 PrintDll.dll,print
出现窗口。
CreateDll
工程类型为Win32 Dynamic-Link Library
//CreateDll.cpp
extern "C" _declspec(dllexport) int sum(int a,int b);
int sum(int a,int b)
{
return a+b;
}
UseDll
工程类型为Win32 Console Application
//UseDll.cpp
#include
using namespace std;
extern "C" _declspec(dllimport) int sum(int a,int b);
int main(int argc,char *argv[])
{
int a;
a = sum(8,10);
cout << "a=" <<a <<endl;
return 0;
}
编译CreateDll
生成CreateDll.dll
和CreateDll.lib
,复制到UseDll
项目的Debug
目录,在UseDll
项目添加文件:CreateDll.lib,CreateDll.dll
,编译运行UseDll。
软件 | 功能 |
---|---|
PEID | 察看软件所用的编程语言和加壳类型 |
eXeScope | 解析、修改E格式文件中的资源 |
Dependency Walker | DLL的基本分析工具 |
PE Explorer | 浏览、修改软件资源,具备有W32DASM 软件的反编译能力和PEditor软件的PE文 件头编辑功能 |
PPEE | 高级PE工具 |
CFF Explorer | PE工具 |