当前位置:首页 > 我的程序 > 正文内容

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

Peirre4年前 (2021-05-16)我的程序615

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

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

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

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

后来就有了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

分享给朋友:

相关文章

几种在linux中的调试器的编译结果。

几种在linux中的调试器的编译结果。

很多人用源码进行编译,会不成功,原因有很多,我现在讲讲linux 下必有的gdb调试器来说明一下。我用的linux 系统 是 优麒麟 19.04.10.1 加强版,属于试用版。随系统自带的gdb是8....

linux 下的《仙剑奇侠传》

linux 下的《仙剑奇侠传》

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

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

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

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

谈谈引导程序的想法。

谈谈引导程序的想法。

当个人电脑一出现就有了磁盘系统,不管是软盘,光盘,硬盘,计算机要应用操作系统就要引导,引导程序一段代码。这引导代码很小,在第一个磁盘的扇区上,平时没什么人注意它。这段代码损坏一个字节,都会造成计算机瘫...

我谈易语言

我谈易语言

易语言是一个集成打包的中文编程的语言。说实话,只要在电脑上的程序,易语言都可以用自己的方式实现。易语言可以开发linux 控制台下的图文程序和工具,十分好用。易语言的源码和例子量很大,精华源码例子已经...

nasm 汇编命令2021年2月后增补。

nasm 汇编命令2021年2月后增补。

;=========================================================== ;nasm 增补新汇编命令集 ; ;引用方式  ;把icpup.inc...