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

Peirre3年前我的程序584

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

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

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

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

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

相关文章

发布一个雷达显示程序,仅测试,有问题请交流。

发布一个雷达显示程序,仅测试,有问题请交流。

下载地址:雷达显示程序.rar这个雷达显示程序用来显示雷达数据的。使用易语言编写。数据部分还没完善。欢迎提意见。...

linux 下的汉字输入法.

linux 下的汉字输入法.

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

关于ch341驱动,联动3D打印机USB串口通讯.

关于ch341驱动,联动3D打印机USB串口通讯.

手上有个3D打印机,搬家的原因,好久没用.天气热了,打印温度很适合,正好可以使用.又过了一年.发现linux 版本内核已经升级,和原来的系统不一样了. 按照3D打印机的说明,和寻找它的程序,原来的方法...

关于DOSBOX的简单说明。

关于DOSBOX的简单说明。

linux 下的共享软件DOSBOX 在有些版本的linux 中不能使用鼠标。网上说明要换声卡地址和中断,连接鼠标端口才可以使用。 曾经设置过,可以使用参数不记得。有个解决方法。这是软件问题。 先卸载...

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

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

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

刚刚上手的一个汇编程序nasm。

刚刚上手的一个汇编程序nasm。

今天使用了masm32软件,总有使不上劲的感觉。因为intel 指令集很多都没有,自己想测试一下,一边翻资料,一边使用。windows 编程好用,但是指令不全,心里总是感觉差一点。又不是编大程序,只是...