bfd的後端資料表示

2021-04-21 18:33:05 字數 1970 閱讀 5252

快樂蝦http://blog.csdn.net/lights_joy/

[email protected]

本文適用於

bfinutils-2.19

vs2008

bfd同時支援許多不同格式的檔案,這些格式各異的檔案自然要用不同的結構來進行表示,

bfd採用的做法是在

bfd這個結構體中使用乙個

union

來表示:

/* used by the back end to hold private data.*/

union

tdata;

嗯,不同的

target

各取所需!

由於這些結構體大小各異,其記憶體的分配與**自然也是各個

target

所負責的事情了。在

bfd_target

這個結構體中為此設計了乙個**函式陣列:

/* set the format of a file being written.*/

bfd_boolean (*_bfd_set_format[bfd_type_end]) (bfd *);

對於不同的檔案型別使用不同的**函式進行處理,比如

bfd_elf32_bfin_vec

這個target

就這樣定義**函式:

#ifndef

bfd_elf32_mkobject

#define

bfd_elf32_mkobject bfd_elf_make_generic_object

#endif

/* bfd_set_format: set the format of a file being written */

,當某個

target

檢測到所要讀取的檔案確實是自己所能處理的型別時,它將呼叫這個**函式,在此**函式中為後端資料分配空間(以

object

檔案處理為例):

/* create a tdata field object_size bytes in length, zeroed out and with

the object_id field of an elf_obj_tdata field set to object_id.*/

bfd_boolean

bfd_elf_allocate_object (bfd *abfd,

size_t object_size,

enum

elf_object_id object_id)

bfd_boolean

bfd_elf_make_generic_object (bfd *abfd)

雖然可以直接通過相應的結構體來訪問後端資料,但是

bfd並不鼓勵這樣做。它定義了一些叫

bfd_get_*

的巨集來做這樣的事情。比如:

#define

bfd_get_section(x) ((x)->section)

#define

bfd_get_section_name(bfd, ptr) ((ptr)->name + 0)

等等。具體可參見

bfd.h

中的定義。

bfd對多目標的支援

2008-9-25

bfd對

elf32格式的支援

(

2008-11-7

)

objdump與

readelf的區別

(

2008-11-10

)

objdump**分析

(

2008-11-10

)

bfd的檔案格式識別

2008-11-10

Python 的資料表示

一 常量 變數和物件 1 常量 是指在程式的執行過程中不變的量。如 1,2,3,4,true false 也有一些包含在模組中的用符號表示的常量,常用的如math模組中的pi和e,如 from math import sqrt,sin pi 顯示3.141592653589793 e 顯示2.718...

BCD資料表示

2.13 bcd資料表示 雖然整數和浮點格式已經可以滿足一般程式的資料表示需求,但是在一些特殊的情況下,其他的數字表示方式更加方便一些。在本節中,我們將對二進位制編碼的十進位制 bcd 格式進行討論,因為80x86 cpu為這種資料表示方式提供了少量的硬體支援。bcd數值是由一些半位元組組成的序列,...

Struts Hibernate資料表示

在 struts hibernate 這種結構中,是不應該把hibernate產生的po直接傳遞給jsp的,不管他是iterator,還是list,這是乙個設計錯誤。我來談談在j2ee架構中各層的資料表示方法 web層的資料表示是formbean,資料 於html form post 業務層的資料表...