по стандарту в COFF код в секции .text(нет секции .code)
uint32_t = 4 байт
uint16_t = 2 байт

Start lib\coff header
struct _CoffHeader {
    uint16_t    machine;
    uint16_t    numberOfSections;
    uint32_t    timeDateStamp;
    uint32_t    pointerToSymbolTable; symbol string table resides at the end of the symbol table.
    uint32_t    numberOfSymbols; this*sizeof._CoffSymbol +4 = start symbol string table
    uint16_t    sizeOfOptionalHeader;
    uint16_t    characteristics;
}
имя произвольной длины только в string table
struct _CoffSection {
    char        name[8]; //вау ! имена 8 байт ? Думал имя произвольной длины.
    uint32_t    virtualSize;
    uint32_t    virtualAddress;
    uint32_t    sizeOfRawData;
    uint32_t    pointerToRawData;
    uint32_t    pointerToRelocations; а это интересно
    uint32_t    pointerToLinenumber; is usually 0
    uint16_t    numberOfRelocations;  а это интересно
    uint16_t    numberOfLinenumber;
    uint32_t    characteristics;
}

relocation table have many this struct:
typedef struct _CoffReloc {
    uint32_t    virtualAddress; 
    uint32_t    symbolTableIndex;
    uint16_t    type;
}
The virtualAddress value is the relative offset from the section start to the first byte of the
 address to modify.

The symbolTableIndex value contains the index of the symbol in the Symbol Table. 
This value is used to retrieve information about the symbol that must be relocated in the section.

Symbol Table:
struct _CoffSymbol {
    union {
        char        name[8];
        uint32_t    value[2];
    } first;
    uint32_t    value;
    uint16_t    sectionNumber;
    uint16_t    type;
    uint8_t        storageClass;
    uint8_t        numberOfAuxSymbols;
}