LLVM Cpu0 新后端9 objdump readelf

 想好好熟悉一下llvm开发一个新后端都要干什么,于是参考了老师的系列文章:

LLVM 后端实践笔记

代码在这里(还没来得及准备,先用网盘暂存一下):

链接: https://pan.baidu.com/s/1yLAtXs9XwtyEzYSlDCSlqw?pwd=vd6s 提取码: vd6s 

这一章介绍如何生成 ELF 文件,ELF 文件是一种通用的可执行文件、目标文件和共享库与核心转储文件标准,最早是由 System V 应用二进制接口发布,之后成为一种标准,并很快被类 Unix 操作系统接受。几乎所有支持编译的后端平台都需要生成一种可执行文件格式来执行代码,现在主流的三种可执行文件分别是 Linux 系统及裸机系统支持的 ELF 文件、Windows 系统支持的 COFF 文件以及 MacOS 系统支持的 Mach-O 文件格式。我们让 Cpu0 后端生成 ELF 文件格式。

之前章节我们介绍了 Cpu0 后端生成各种指令编码的代码,所以有关于指令编码的行为,是由 td 文件中的描述来确定的,LLVM 的公共部分已经帮我们生成了指令编码的功能。但目前还没有定义生成 ELF 文件的头部、段组成、重定位信息等内容,这一章主要实现这部分内容。

这一章,我们会使用二进制解析工具来检查 ELF 文件,比如 objdump 和 readelf 文件。LLVM 中有类似于 objdump 的工具,默认生成名称为 llvm-objdump,基本使用和 objdump 一致,我们这一章也会试用这个工具。

一、ELF文件的简单介绍

这一节只是简单介绍,有关于详细的学习材料,在网上可以找到很多。ELF 文件格式的支持是 LLVM 默认便已经完成的,不需要我们做更多的工作(少量工作在第 2 章中已经完成)。ELF 文件格式有两种视图,分别是目标文件视图和可执行文件视图。目标文件视图是为链接器服务的,它的划分标准是段(Section),不同的段有 .text 段存放代码内容、.data 段存放数据、.rodata 段存放只读数据等,这些段的索引保存在 ELF 文件末尾的段头部表(Section header table)中。链接器通过访问段头部表来检索到各段。

可执行文件视图是为执行服务的,它的划分标准是节(Segment),不同的节可能是多个段的组合,比如执行时,因为要关心数据的访问权限,.text 段和 .rodata 段会合并为一个只读数据的节。加载器会访问位于 ELF 文件开头文件头部表之后的节头部表(Segment header table),来访问各节。

二、工具的使用

2.1 llvm-objdump和llvm-readelf的工具选择

我一般反汇编用的llvm-objdump,读字段用llvm-readelf较多,主要看大家习惯。虽然readelf写着是读elf文件,但是llvm对于llvm-readelf进行了扩展,也能用来读取coff和macho文件。

选项有多个的情况是有缩写

2.2 llvm-objdump

2.2.1 --mattr=a1

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值