bfd对elf32格式的支持

本文详细介绍了bfd如何通过重定义bfd_target结构体的函数指针来支持多种目标格式,特别是针对Elf32文件格式的不同处理器和目标系统差异进行了深入探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

快乐虾

http://blog.csdn.net/lights_joy/

lights@hb165.com

   

本文适用于

bfinutils-2.19

vs2008

   

欢迎转载,但请保留作者信息

 

在《bfd对多目标的支持》这篇文章中说道,所有的目标支持都是通过重定义bfd_target这个结构体的函数指针来实现的。Elf32是一种常见的文件格式,只是由于不同处理器和目标系统的差异,这些文件的格式略有不同。为了最大限度地重用代码,bfd让所有的elf32格式的文件处理器(*_vec变量)定义共用一个文件:elf32-target.h。这个文件中有如下定义:

const bfd_target TARGET_LITTLE_SYM =

{

  /* name: identify kind of target */

  TARGET_LITTLE_NAME,

 

  /* flavour: general indication about file */

  bfd_target_elf_flavour,

 

  /* byteorder: data is little endian */

  BFD_ENDIAN_LITTLE,

 

  /* header_byteorder: header is also little endian */

  BFD_ENDIAN_LITTLE,

………………………………….

 

  /* backend_data: */

  &elf32_bed

};

这个头文件仅供bfd库内部使用,在C文件中使用

#include "elf32-target.h"

之前,bfd会先定义一些宏,比如:

#define TARGET_LITTLE_SYM        bfd_elf32_bfin_vec

#define TARGET_LITTLE_NAME       "elf32-bfin"

#define ELF_ARCH            bfd_arch_bfin

#define ELF_MACHINE_CODE         EM_BLACKFIN

#define ELF_MAXPAGESIZE          0x1000

#define elf_symbol_leading_char      '_'

………………………

这样,经过宏替换,就可以使用不同的目标有不同的处理方式。

bfd代码中搜一下“elf32-target.h”,很容易就可以发现所有elf32格式的目标了,呵呵!

 

参考资料

bfd对多目标的支持 2008-9-25

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌云阁主

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值