bfd对elf32格式的支持

来源:互联网 发布:c语言课程coursera 编辑:程序博客网 时间:2024/06/08 17:53

 

快乐虾

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