无法执行二进制文件: 可执行文件格式错误_linux中ELF二进制程序解析

本文介绍了Linux系统中可执行文件(ELF)的基本结构,包括文件头、程序头表、节头表等关键部分。ELF文件的开头包含文件头,用于描述文件属性,如是否可执行、入口地址等。程序头表和节头表则分别描述段和节的信息,帮助系统在内存中正确加载和执行程序。此外,文章还提到了readelf和xxd命令用于查看ELF文件信息。
摘要由CSDN通过智能技术生成

6255370481e48c70bd7b9a6ed252d3d0.png

0. 简介

在Linux系统的可执行文件(ELF文件)中,开头是一个文件头,用来描述程序的布局,整个文件的属性等信息,包括文件是否可执行、静态还是动态链接及入口地址等信息;如下图所示:

6b8778b11deb60c76a67ce94c143a927.png

程序文件中包含了程序头,程序的入口地址等信息不需要写死,调用代码可以通用,根据实际情况加载;此时的文件不是纯碎的二进制可执行文件了,因为包含的程序头不是可执行代码;将这种包含程序头的文件读入到内存后,从程序头中读取入口地址,跳转到入口地址执行;

0.1 文件格式

Linux环境中,目标文件是源代码编译后未链接的中间文件,如:gcc编译生成的.o文件;可执行文件(.o)、动态链接库(.so)、静态链接库(.a)文件都是按照ELF可执行文件格式存储的;

ELF指:Executable and Linkable Format,可执行链接格式;本文中的目标文件指各种类型符合ELF规范的我呢见,如:二进制可执行文件、Linux下的.o目标文件和.so动态库文件;

可执行文件(Executable file):经过编译链接后,可以直接执行的程序文件,如:ELF文件;

共享目标文件(Shared object file):动态链接库,在可执行文件被加载的过程中动态链接,成为程序代码的一部分;

可重定位文件(Relocatable file):可重定位文件即目标文件和静态库文件,是源文件编译后但未完成链接的半成品,被用于与其他目标文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值