Linux的.out是什么文件

上周一位客户问我 Linux 中的 .a.out 文件是什么,这让我很困惑。
后来看了资料,才发现这家伙还真是有趣。
你看,我用 gcc 编译代码后,默认生成的二进制文件名为 a.out。
该名称是标准化的,不是随意选择的。
虽然文件扩展名在 Linux 系统上基本上没有意义,但要运行此可执行文件,您必须键入 ./a.out,而不仅仅是 ./a.out。
系统会查找名为 a.out 的文件,而不是名为 a.out 的文件。
我以前经历过这个。
命令写错了,系统一片混乱,找不到。

说到文件扩展名,我不知道你提到的 .xnszs 格式。
此名称不作为标准格式出现。
我猜这是某些特定软件使用的自定义扩展?获取专业的文件查看器并尝试一下。
我尝试过使用UltraEdit打开一些奇怪的格式,但这是我第一次遇到这个.xnszs。
也许他们在文件中隐藏了一些机密信息?对于这样的事情谁能肯定地说呢?但话虽如此,Linux 系统还是非常棒的。
多用户和多任务支持是必须的。
我的电脑有两个系统,Windows和Linux,我经常要在两个系统之间切换。
我比我更了解Linux文件权限管理。
每个用户都有一个单独的位置,任何人都不能碰其他人的东西。
至于图形界面,虽然没有Windows那么花哨,但是习惯了也还是不错的。
但说到技术就得开门见山,明白了才安心。
你呢?对这种技术细节感感兴趣吗?

linux中bin存放什么文件格式

说实话,第一次接触Linux中的bin目录时,我觉得它很神秘。
没错,/bin就是存放系统启动时使用的二进制文件的地方,比如ls、cp、mv等,如果没有这些命令,Linux基本上就无法操作。
我记得当我第一次在服务器上安装系统时,光是敲几个基本命令就花了我很长时间。

有趣的是,这些二进制文件是纯机器代码,例如 ls 命令。
用GCC编译出来之后,就是一堆0和1 ,完全看不懂。
但这里有一些信息。
bin目录下的东西不叫“可执行文件”。
更准确地说,它们应该是“可加载文件”。
计算机必须首先将这些二进制代码读入内存,然后CPU才能执行它们。
我有一个朋友当时写了一个小工具。
编译时没有问题,但是安装到系统后却打不开。
后来发现是二进制兼容性有问题。
这项工作确实很烦人。

说到文件格式,bin目录中的所有内容都是ELF格式,但是这里有一个技巧。
Linux系统启动时,init进程会挂载proc文件系统。
此时/bin目录下的一些关键命令实际上还在内存中,比如init。
我曾经见过系统启动异常。
原来是init进程加载到内存的版本与硬盘上的版本不匹配。
我当时真的是又惊又冷。
浑身都被汗湿透了。

说到目录级别,/usr/bin 非常有趣。
之前在CentOS系统上安装了OpenSSH,发现scp命令安装在/usr/bin/scp下。
然而,当我升级系统时,我发现这个SCP版本已经被系统自带的版本取代了。
结果远程复制命令突然失败了。
后来我发现OpenSSH是用OpenSSH-Server包安装的,而scp命令属于另一个包。
这个任务非常复杂,普通用户无法理解。

sbin目录其实是一个特殊的存在。
我以前做系统管理,每次要重启网络或者调整磁盘分区时,都必须以root身份登录。
例如,ifconfig用于检查网卡的状态,该命令放在/sbin/ifconfig中。
记得有一次我以普通用户执行ifconfig时,系统卡住了,不得不重装系统。
所以这件事需要非常小心地对待。

在文件扩展名方面我也犯了错误。
有一次,我给一个重要的二进制文件添加了.exe后缀。
结果系统根本没有执行,导致“command not find”。
后来查资料发现Linux根本看不到扩展名,完全依靠文件头中的幻数来识别。
这让我想起了Windows系统,用户使用扩展。
更愿意这样做,即使他们知道自己在欺骗。

最烦人的是PATH环境变量。
我的一家客户公司出现系统混乱。
原来,两家软件公司同时编译了同一个工具,只是放在了不同的bin目录下。
由于客户删除了/usr/local/bin,系统找不到该公司提供的版本,自动使用了其他公司的版本。
这种问题就像大型系统中的定时炸弹。

总的来说,Linux的bin目录系统确实是一个优秀的设计,但是如果使用不当的话,可能会导致很大的问题。
我有一个朋友是做运维的。
由于他不知道/usr/local/bin和/usr/bin的区别,所以他用自己编译的版本替换了系统自带的sed,导致所有系统脚本崩溃。
所以你必须非常小心,不要随意编译。

ELF文件装载和符号表解析

哦,说到ELF文件,我计划2 02 2 年去某个城市学习,他们说很复杂。
首先,它必须是ELF文件。
如何识别呢?简单来说,文件开头有一个幻数,3 2 位为0x7 f'E'L'F',6 4 位为0x7 f'E'L'F'0x02 ,这就是你的身份证。

然后需要解析ELF文件头,其中包含目标架构和入口点地址等重要信息。
操作系统一看到这一点,就知道如何将文件的代码段、数据段和动态链接信息加载到内存中。

接下来我们需要仔细看看程序头表。
这告诉操作系统哪些文件内容应该复制到内存中的哪个位置。
这相当于在内存中分配房间,每个房间必须有一个居住者。

接下来,我们设置一个入口点,它告诉操作系统从哪里开始执行程序。
设置堆栈和寄存器。
所有的动作都必须按照规则进行。

最后,零剥皮的过程就像搬家具一样。
房间很大,我们需要填补空缺的地方。

符号表分析,这个就更神秘了。
记录程序中的各种符号,例如函数、变量和标签。
链接器和调试器使用此表来查找它们,就像它们查找朋友一样。
readelf 工具允许您查看有关 ELF 文件的各种信息。
例如,使用readelf -h查看文件头,readelf -S查看节头表,readelf -l查看程序头表,readelf -s查看符号表。

综上所述,ELF文件加载和符号表解析对于理解Linux系统可执行文件如何工作非常重要。