windows obj文件格式解析

Posted pro-love

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了windows obj文件格式解析相关的知识,希望对你有一定的参考价值。

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文件格式解析的主要内容,如果未能解决你的问题,请参考以下文章

python将.obj格式转换成.pcd格式

obj是啥格式的文件

如何将 .obj 转换为 .json 格式的 3D 模型?

js怎么解析geojson 格式的

wav音频文件头解析

js 判断文件格式