2016wapjpc 发表于 2019-6-26 11:26

静态链接的实质

在Pe文件的开发过程中,有静态链接,也有动态链接,我这里做了下学习,一次又一次的追本溯源,才弄清楚。

c语言代码变成可执行的程序的过程    :首先是define 对代码进行替换   ,再编译成二进制的数据(以558B……这样的形式显示),最后链接,加入别人写好的代码(函数),这样loader就可以运行了。
在windows上叫静态链接和动态链接,这样exe就跑起来了。
静态链接的好处是方便 ,保密 。是编译时直接把代码编译到程序中去了,我们不知道它原来是不是程序的一部分。但是但是当我们想加入修改相关功能时就要重新编译dll和exe.


静态链接库的实现二进制代码全在.lib中,dll.cpp是实现过程,dll.h是代码的声明。 staticdll.lib是生成的静态二进制的数据,说明dll的实现代码在lib中。


这样,在编写的exe代码中可调staticdll.lib。

#include "stdafx.h"
#include "DLL.h"

#pragma comment(lib,"staticdll")

int main(int argc, char* argv[])
{
        int x = Mul(1,4);
        int y = Add(2,3);
        printf("%d%d\n",x,y);
        return 0;
}
这样生成exe就成功调用我我们自己写的静态链接库文件了。其实我们用vc时的系统函数都是静态链接库文件。


自己不知道看了多少次,现在才想通了。以做记忆吧!

fnp902003 发表于 2019-6-26 13:14

支持一个~

201511106109 发表于 2020-2-27 12:39

感谢分享
页: [1]
查看完整版本: 静态链接的实质