久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

[原創(chuàng)]學(xué)習(xí)OBJ文件格式

 羊玉wngbx 2020-04-22
如有錯(cuò)誤之處  還請(qǐng)大家指出  以免誤導(dǎo)他人,。
學(xué)習(xí)Obj文件格式
說明:此Obj是指用我們VC或者masm等編譯器編譯源文件(.cpp .c  .asm)產(chǎn)生的COFF(Common Object File Format)格式的Obj目標(biāo)文件,。而非網(wǎng)上漫天飛的什么3d的什么玩意,那個(gè)咱不懂~
(一)整體構(gòu)架


IMAGE_SECTION_HEADER(多個(gè))


Symbol表(字符串表,,symbol表重定位字符串?dāng)?shù)據(jù)的時(shí)候會(huì)用到)

(二)詳解
        ① IMAGE_FILE_HEADER結(jié)構(gòu),,從名字也猜個(gè)八九不離十
typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;                                //一般我們的intel cpu是0x014c
    WORD    NumberOfSections;      //section 段個(gè)數(shù)
    DWORD   TimeDateStamp;        //一般是此文檔生成的時(shí)間
    DWORD   PointerToSymbolTable;   //symbol table表的文件偏移地址(注意:本文的偏移一律指絕對(duì)偏移,RVA的概念在obj文件里用不到)
    DWORD   NumberOfSymbols;      //symbol表個(gè)數(shù)
    WORD    SizeOfOptionalHeader;    //0 no used in obj file
    WORD    Characteristics;           //0no used in obj file
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;
② IMAGE_SECTION_HEADER結(jié)構(gòu),,應(yīng)該非常熟悉才對(duì),,分析PE的基礎(chǔ)
typedef struct _IMAGE_SECTION_HEADER {
    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];
    union {
            DWORD   PhysicalAddress;
            DWORD   VirtualSize;
    } Misc;                                                        //no used in obj file
    DWORD   VirtualAddress;
    DWORD   SizeOfRawData;                //大小
    DWORD   PointerToRawData;                //偏移
    DWORD   PointerToRelocations;        //relocations頭 文件偏移
    DWORD   PointerToLinenumbers;        //unknown
    WORD    NumberOfRelocations;        //recolations 個(gè)數(shù)
    WORD    NumberOfLinenumbers;  //unkonwn
    DWORD   Characteristics;                        //section屬性
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;
   ③ 重定位信息頭IMAGE_RELOCATION
typedef struct _IMAGE_RELOCATION {
    union {
        DWORD   VirtualAddress;
        DWORD   RelocCount;             //
    };        //指相對(duì)于section內(nèi)容的偏移地址
DWORD   SymbolTableIndex; //symbol表的索引
WORD    Type;        //這個(gè)指 類型我云里霧里的 暫時(shí)沒搞明白  
//大俠知道的指點(diǎn)一下       
//0x0060 代表 DIR32,0x0014 代表 REL32        具體是,、//啥自己體會(huì)吧  我體會(huì)不好  就不誤導(dǎo)別人了
} IMAGE_RELOCATION;
typedef IMAGE_RELOCATION UNALIGNED *PIMAGE_RELOCATION;

④IMAGE_SYMBOL結(jié)構(gòu),,前面不是說過一個(gè)symbol表的索引嗎,就是指這個(gè)的索引
typedef struct _IMAGE_SYMBOL {
    union {
        BYTE    ShortName[8];
        struct {
            DWORD   Short;     // if 0, use LongName
            DWORD   Long;      // offset into string table
        } Name;
        PBYTE   LongName[2];
} N;        //存儲(chǔ)一個(gè)字符串,。如果太長了就令前4字節(jié)為0,,//后4字節(jié)保存一個(gè)偏移來指向字符串首地址,這//個(gè)偏移起始地址是string table
    DWORD   Value;                                        //通常為0
    SHORT   SectionNumber;                        //指向哪個(gè)section,,1為第一個(gè)
    WORD    Type;                                        //這個(gè)說不明白
    BYTE    StorageClass;                        //這個(gè)也很就麻煩不說了
    BYTE    NumberOfAuxSymbols;        //指示后面還有幾個(gè)本結(jié)構(gòu)大小的buffer存儲(chǔ)數(shù)據(jù)
} IMAGE_SYMBOL;
typedef IMAGE_SYMBOL UNALIGNED *PIMAGE_SYMBOL;
說明:我并沒有找到哪一個(gè)結(jié)構(gòu)指示了string table的文件偏移,,那么我們姑且認(rèn)為string table的起始文件偏移為PointerToSymbolTable + NumberOfSymbols*sizeof(IMAGE_SYMBOL)

參考:
http://www./assembly/07.html(他寫的比我好多啦)
       
By 看雪blueapplez
                                                                                                                2010年10月3日9:35:53                       

排版部太好,貌似這樣看很吃力,,還是下載附件看吧

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多