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

Peirre3年前我的程序559

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

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

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

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

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

相关文章

一个易语言写的函数信号发生器。

一个易语言写的函数信号发生器。

易语言写的函数信号发生器,编写的想法是准备应用“雷达”的信号发射源。本来包含声音部分,有待继续完善。下载地址:https://pan.baidu.com/s/1mi22Ico...

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

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

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

随手写的时间设置程序,主要是防止系统时间无故修改。

随手写的时间设置程序,主要是防止系统时间无故修改。

程序说明:测试版程序功能。同步系统时间数据可选月历,手工输入可自动识别时间修改,修改后一分钟报警。测试版没有恢复时间功能。以后会增加。欢迎下载的朋友帮助我找程序问题,没有花多少功夫,请多多原谅。这个程...

阿里云后台的一个身份证信息查询工具。

阿里云后台的一个身份证信息查询工具。

注:此软件时效性已过,只在此陈列,没有什么意义。工具主图形界面有时会欠费,查不了时,请付1分钱给阿里云。下载地址:个人身份证阿里云查询.rar...

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

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

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

linux 下的 opengl SDK。

linux 下的 opengl SDK。

opengl 图形库是开放式图形库,最近出了一个freeglut3 我们下载它:sudo apt-get install freeglut3sudo apt-get install freeglut3...