1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > lib库反编译C语言 C语言静态链接库(lib)与动态链接库(dll)

lib库反编译C语言 C语言静态链接库(lib)与动态链接库(dll)

时间:2023-06-13 23:43:56

相关推荐

lib库反编译C语言 C语言静态链接库(lib)与动态链接库(dll)

今天看到了之前的笔记,看到之前写的笔记,感觉自己都不认得了~~一、静态链接库(lib)

首先创建 “在VC6中创建项目:Win32 Static Library”

在项目中创建两个文件:xxx.h 和 xxx.cpp

头文件的话就写函数声明,cpp正常来写函数实现即可!

例如:

[C] 纯文本查看 复制代码x.h代码:int Plus(int x,int y);

x.cpp代码 int Plus(int x,int y){

return x+y;

}

通过编译,则得到x.h和x.lib头文件

接下来创建一个普通的c语言程序引入h和lib文件即可

QQ截图52.png (122.49 KB, 下载次数: 2)

-12-1 18:35 上传

通过以上代码,咱们就可以使用lib里面的Plus函数了,当然,前提是要包含lib文件和头文件才可以!

二、动态链接库

VC6创建项目--Win32 Dynamic-Link Livrary

之后操作和创建静态链接库一样,头文件写函数声明,Cpp文件写函数实现,这里就不反复说了。

生成之后,导入x.lib与x.dll即可!

QQ截图205742.png (129.13 KB, 下载次数: 0)

-12-1 18:36 上传

具体看下面代码~~~~

1.隐式链接

将dll和lib文件放到工程目录下面,

将#pragma comment(lib,"dongtai.lib") 添加到调用文件中

加入extern函数声明就可以使用了

[C] 纯文本查看 复制代码extern "C" __declspec(dllimport) int Plus (int x,int y);

extern "C" __declspec(dllimport) int Sub (int x,int y);

extern "C" __declspec(dllimport) int Mul (int x,int y);

extern "C" __declspec(dllimport) int Div (int x,int y);

2.显示链接

1.定义函数指针

2.声明函数指针变量

3.动态加载dll到内存中

4.获取函数地址 GetProcAddress()

5.调用函数

[C] 纯文本查看 复制代码#include "stdafx.h"

#include

#pragma comment(lib,"dongtai.lib")

/* 隐式链接

extern "C" __declspec(dllimport) int Plus (int x,int y);

extern "C" __declspec(dllimport) int Sub (int x,int y);

extern "C" __declspec(dllimport) int Mul (int x,int y);

extern "C" __declspec(dllimport) int Div (int x,int y);

*/

//定义函数指针

typedef int (*lpPlus)(int,int);

typedef int (*lpSub)(int,int);

typedef int (*lpMul)(int,int);

typedef int (*lpDiv)(int,int);

int main(int argc, char* argv[])

{

lpPlus myPlus;//声明函数指针变量

HINSTANCE hModule = LoadLibrary("dongtai.dll");//动态加载dll到内存

myPlus = (lpPlus)GetProcAddress(hModule,"Plus");//通过GetProcAddress获取函数地址

printf("%d\n",myPlus(1,2));

return 0;

}

经过上面的简单学习,可能还有人分不清静态与动态的区别,接下来把生成的exe文件放到OD里分析

首先来看动态的,可以看到我们的程序是加载的dll文件,也就是说主要功能还是在dll里面,当函数要进行修正的时候,我们只需要修正dll文件即可。

QQ图片46.png (84.48 KB, 下载次数: 0)

-12-1 18:37 上传

静态与动态不同的区别是,静态类似于假模块化,什么是假模块呢?看似是引入了外部文件,其实在运行的时候,lib文件里的代码都贴到了exe程序里面。

接下来看反汇编,我们的lib按道理是引入进来的,但是在程序使用的时候,地址已经到了exe里面。所以当我们的lib静态库文件修改的时候,也要重新编译我们的exe文件!

QQ截图19.png (80.38 KB, 下载次数: 3)

-12-1 18:37 上传

就到这啦~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。