码迷,mamicode.com
首页 > Windows程序 > 详细

windows obj文件格式解析

时间:2019-06-20 21:27:22      阅读:598      评论:0      收藏:0      [点我收藏+]

标签:sizeof   block   nali   lock   winhex   use   oca   vs2013   tor   

1.首先vs 2013建立工程生成obj文件,如下图。

技术图片

 

2.打开CMD命令行模式,用工具dumpbin执行以下命令对test.obj进行解析。

dumpbin /all test.obj > test.txt

obj解析信息会保存在test.txt文件中。

obj文件它的格式其实就是COFF(通用对象文件格式)文件格式。

先来看一下COFF文件的整体结构,看看它到底长得什么样!
File Header
Optional Header
Section Header 1
......
Section Header n
Section Data
Relocation Directives
Line Numbers
Symbol Table
String Table
 
3.在vs2013中,winnt.h定义了coff文件格式相对应的结构体,现在来分析:
File Header:
技术图片
上述信息只是给出了file header的信息,它对应的结构体,在winnt.h中是
1 typedef struct _IMAGE_FILE_HEADER {
2     WORD    Machine;
3     WORD    NumberOfSections;
4     DWORD   TimeDateStamp;
5     DWORD   PointerToSymbolTable;
6     DWORD   NumberOfSymbols;
7     WORD    SizeOfOptionalHeader;
8     WORD    Characteristics;
9 } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

用winhex文件打开test.obj文件

技术图片

 

Option Header值为0,所以没有。

Section Header:

#节1

技术图片

对应结构体:

 1 typedef struct _IMAGE_SECTION_HEADER {
 2     BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];
 3     union {
 4             DWORD   PhysicalAddress;
 5             DWORD   VirtualSize;
 6     } Misc;
 7     DWORD   VirtualAddress;
 8     DWORD   SizeOfRawData;
 9     DWORD   PointerToRawData;
10     DWORD   PointerToRelocations;
11     DWORD   PointerToLinenumbers;
12     WORD    NumberOfRelocations;
13     WORD    NumberOfLinenumbers;
14     DWORD   Characteristics;
15 } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

#节2

 技术图片

#节3

技术图片

#节4

技术图片

上述四个节没有”行号项“和”重定位项“

#节5

技术图片

这个节有5个重定位项,有不同的类型Type,在raw data中用 00 填充,在链接时,该出数字会进行改变。

重定位结构体如下:

typedef struct _IMAGE_BASE_RELOCATION {
    DWORD   VirtualAddress;
    DWORD   SizeOfBlock;
//  WORD    TypeOffset[1];
} IMAGE_BASE_RELOCATION;
typedef IMAGE_BASE_RELOCATION UNALIGNED * PIMAGE_BASE_RELOCATION;

#节6

技术图片

#节7

技术图片

#节8

技术图片

#节9

技术图片

#节A

技术图片

Symbol Table:

技术图片技术图片

符号表的数据结构

typedef struct _IMAGE_SYMBOL {
    union {
        BYTE    ShortName[8];
        struct {
            DWORD   Short;     // if 0, use LongName
            DWORD   Long;      // offset into string table
        } Name;
        DWORD   LongName[2];    // PBYTE [2]
    } N;
    DWORD   Value;
    SHORT   SectionNumber;
    WORD    Type;
    BYTE    StorageClass;
    BYTE    NumberOfAuxSymbols;
} IMAGE_SYMBOL;
typedef IMAGE_SYMBOL UNALIGNED *PIMAGE_SYMBOL;

 

String Table:

技术图片

 

字符串表前四个字节表示字符串表的长度,上图中的0xA5。

4.最后的文件布局如下图:

技术图片

 

 

windows obj文件格式解析

标签:sizeof   block   nali   lock   winhex   use   oca   vs2013   tor   

原文地址:https://www.cnblogs.com/pro-love/p/10917483.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!