编译文件的各种LIB文件分析

Peirre3年前我的程序549

玩计算机的都知道,计算机执行的是机器指令。

机器指令是手工输入的,后来有了汇编语言。

汇编语言很是方便,加了很多辅助符号帮助人们使用机器指令。

很多重复的指令功能,就用宏和函数过程来反复使用。

后来就有了C语言。C++,Delphi/Pascal,Fortan,BASIC,可以编译成机器指令码的编译语言。

程序越来越多,越来越大,各种函数就集中起来了,就有了各种打包的库文件然后加上引用库文件的说明文件。

单独成一个系统的库包就成为了一个开发包。单独使用。

Linux 的动态库以 .so结尾,静态库为.a,单个函数文件为.o结尾。

DOS下的库文件为.lib,函数动态库程序自定义。

windows 下的动态库文件结尾为.dll,静态库为.lib

因为这些高级语言各有各的个性,所以为了通用这些库就形成了各种约定。

常见的约定是 C约定 clec,C++约定,pascal约定,stdcall 约定

c,pascal,stdcall,约定的区别就是函数调用的进入函数和出函数参数的进栈先后顺序和返回方式

c++约定就是库中函数名的定义方式,用来识别同一功能的名称一样的不同函数

windows的动态链接库在静态同名的函数前面加有"__imp__"。

系统核心函数c调用会在函数名前加"_"。

C++调用区分大小写,特定的文件名方式用link识别

在c语言中的printf 函数 ,这函数文件头是 stdio.h 库是 libc,stdlib (标准C)

printf函数在库中的符号会是_printf,_imp_printf,_printf@4,_printf@xyz@4(注@4表示参数为4字节,XYZ是类型匹配)

extren "C"{} 会使用 _printf和printf, C++会使用 __imp__printf,和_printf@xyz@4, 常见的“_IMP_"宏,"PASCALL"宏

高级语的宏会乱定义,系统点的加"_",有的加"__",实际是一个函数,一个宏,我们要统一宏。

2LY7.jpg

加入库函数有几种方式,一个是直接加到程序文件内部,一种是在文件外部,还有一种是系统已经加载。

这几种方式都在内存中运行。放在内存的地址和方式有关。

管理库文件的程序有很多,常见的有TLIB,LIB,POLIB,Golib,GNU nm公司有布兰公司,微软公司,和WATCOM公司还有一些社会组织个人。

各个版本识别的库不一样,高版本的兼容低版本的lib程序。但是有些库会显示不全。这一直是个问题。

好用的库管理程序为nm,和微软高版本的lib,和watcom公司的lib,参数不同,显示的信息也不一样。不常见的是watcom的lib和Tlib。

有些链接器链接库链接不上,其中之一是链接器功能缺陷。我们可以用lib /export:函数名 库文件(包含函数名)导出成 obj文件,

然后加到程序中去。lib /list 库文件,可以看库函数列表。

计算机已经到64位了,函数库文件更是复杂。系统管理好各个函数也是难上加难。

16位库函数,32位库函数,64位函数不能混用。动态库,如果不包含动态库文件,程序执行不了,静态库还要看运行环境。

引用库文件的包含文件也在统一之中,个人认为统一很麻烦。不喜欢各种混杂定义,一直崇尚简单。不过自己的也很乱,主要是自己方便。

题外话,解释型的语言就不谈了,混淆源码可以保护自己健康成长。反正是慢速执行,不要求时间。

那个.net C#和流行的adobe公司的Photoshop系列软件,好大呀,各种不要的相同的语言模块都塞进了程序。

反复刷新内存,一个函数可以塞在程序中好多副本。然后那些动态链接的DLL库做一些不相干的事或者一个个排成”尸体“。

还有微软件的VS STUDIO,东西真多,一个个又有名气,又齐全。还好,我来者不抗拒。这个软件就是”把“。

实际上个人实用就是一丁点,一丁点。”太监“个人版还是不错的。大耙耙只能用来学习。抗议所有大型软件!

0a4d.jpg

相关文章

Radasm 编辑器配置VC2010下的Opencv 环境。

Radasm 编辑器配置VC2010下的Opencv 环境。

Opencv 下载地址:https://opencv.org/releases.html备用下载地址1:https://blog.csdn.net/yanzi1225627/article/detai...

关于 Cannot enable. Maybe the USB cable is bad? 这个问题。

关于 Cannot enable. Maybe the USB cable is bad? 这个问题。

经常摆弄电脑,那USB接口也是插进,拔出多少次。有一天发生了这个问题,什么问题呢?见图:只要是linux 新内核,都会出现这个问题,虚拟机USB功能,DOSBOX等USB功能不可识别。在网上查看了一些...

linux 下的汉字输入法.

linux 下的汉字输入法.

各位老师,才子,同事们好!有很多初级玩linux的同学都会碰到一个难题,也就是在linux 下的汉字输入法.这个问题一直困绕了linux 使用者多年.我还好,每次都使用正常.现在说说心得笔记就可以了....

linux 下的《仙剑奇侠传》

linux 下的《仙剑奇侠传》

以前的DOS游戏《仙剑奇侠传》是炙制人口的一个很容易上手的游戏。这个游戏流行了很多年。很多人在玩过多年以后,重温旧梦,回味游戏之中的情感。这个游戏再版了很多次了。现在linux 下也可以直接玩这个游戏...

USB设备的插入机制与USB驱动故障。

USB设备的插入机制与USB驱动故障。

USB主机检测设备,首先在USB集线器的每个端口的D+,D-上,分别接了一个15K欧姆的下拉电阻到地。集线器端口为空时,被这两个电阻拉低了电平。在USB设备端,D+或者D- 上接了上拉1.5K电阻。全...

关于编译器不愿意说的那些事。

关于编译器不愿意说的那些事。

计算机发展了好多年。当中也不泛有很多对程序的爱好。很多人不是专业水平,也不是在算法类中特别出众,就是喜欢而已。好像认为自己就只那个水平,或者为一些调试不通过发愁。可以说,实际上都不是你的错,是编译器的...