mirror of
https://github.com/odin-lang/Odin.git
synced 2025-12-28 17:04:34 +00:00
128 lines
5.9 KiB
Odin
128 lines
5.9 KiB
Odin
package debug_pe
|
|
|
|
Section_Header32 :: struct {
|
|
name: [8]u8,
|
|
virtual_size: u32le,
|
|
virtual_address: u32le,
|
|
size_of_raw_data: u32le,
|
|
pointer_to_raw_data: u32le,
|
|
pointer_to_relocations: u32le,
|
|
pointer_to_line_numbers: u32le,
|
|
number_of_relocations: u16le,
|
|
number_of_line_numbers: u16le,
|
|
characteristics: IMAGE_SCN_CHARACTERISTICS,
|
|
}
|
|
|
|
Reloc :: struct {
|
|
virtual_address: u32le,
|
|
symbol_table_index: u32le,
|
|
type: IMAGE_REL,
|
|
}
|
|
|
|
IMAGE_SCN_CHARACTERISTICS :: enum u32le {
|
|
TYPE_NO_PAD = 0x00000008, // The section should not be padded to the next boundary. This flag is obsolete and is replaced by IMAGE_SCN_ALIGN_1BYTES. This is valid only for object files. = 0x00000010, // Reserved for future use.
|
|
CNT_CODE = 0x00000020, // The section contains executable code.
|
|
CNT_INITIALIZED_DATA = 0x00000040, // The section contains initialized data.
|
|
CNT_UNINITIALIZED_DATA = 0x00000080, // The section contains uninitialized data.
|
|
LNK_OTHER = 0x00000100, // Reserved for future use.
|
|
LNK_INFO = 0x00000200, // The section contains comments or other information. The .drectve section has this type. This is valid for object files only. = 0x00000400, // Reserved for future use.
|
|
LNK_REMOVE = 0x00000800, // The section will not become part of the image. This is valid only for object files.
|
|
LNK_COMDAT = 0x00001000, // The section contains COMDAT data. For more information, see COMDAT Sections (Object Only). This is valid only for object files.
|
|
GPREL = 0x00008000, // The section contains data referenced through the global pointer (GP).
|
|
MEM_PURGEABLE = 0x00020000, // Reserved for future use.
|
|
MEM_16BIT = 0x00020000, // Reserved for future use.
|
|
MEM_LOCKED = 0x00040000, // Reserved for future use.
|
|
MEM_PRELOAD = 0x00080000, // Reserved for future use.
|
|
ALIGN_1BYTES = 0x00100000, // Align data on a 1-byte boundary. Valid only for object files.
|
|
ALIGN_2BYTES = 0x00200000, // Align data on a 2-byte boundary. Valid only for object files.
|
|
ALIGN_4BYTES = 0x00300000, // Align data on a 4-byte boundary. Valid only for object files.
|
|
ALIGN_8BYTES = 0x00400000, // Align data on an 8-byte boundary. Valid only for object files.
|
|
ALIGN_16BYTES = 0x00500000, // Align data on a 16-byte boundary. Valid only for object files.
|
|
ALIGN_32BYTES = 0x00600000, // Align data on a 32-byte boundary. Valid only for object files.
|
|
ALIGN_64BYTES = 0x00700000, // Align data on a 64-byte boundary. Valid only for object files.
|
|
ALIGN_128BYTES = 0x00800000, // Align data on a 128-byte boundary. Valid only for object files.
|
|
ALIGN_256BYTES = 0x00900000, // Align data on a 256-byte boundary. Valid only for object files.
|
|
ALIGN_512BYTES = 0x00A00000, // Align data on a 512-byte boundary. Valid only for object files.
|
|
ALIGN_1024BYTES = 0x00B00000, // Align data on a 1024-byte boundary. Valid only for object files.
|
|
ALIGN_2048BYTES = 0x00C00000, // Align data on a 2048-byte boundary. Valid only for object files.
|
|
ALIGN_4096BYTES = 0x00D00000, // Align data on a 4096-byte boundary. Valid only for object files.
|
|
ALIGN_8192BYTES = 0x00E00000, // Align data on an 8192-byte boundary. Valid only for object files.
|
|
LNK_NRELOC_OVFL = 0x01000000, // The section contains extended relocations.
|
|
MEM_DISCARDABLE = 0x02000000, // The section can be discarded as needed.
|
|
MEM_NOT_CACHED = 0x04000000, // The section cannot be cached.
|
|
MEM_NOT_PAGED = 0x08000000, // The section is not pageable.
|
|
MEM_SHARED = 0x10000000, // The section can be shared in memory.
|
|
MEM_EXECUTE = 0x20000000, // The section can be executed as code.
|
|
MEM_READ = 0x40000000, // The section can be read.
|
|
MEM_WRITE = 0x80000000, // The section can be written to.
|
|
}
|
|
|
|
|
|
IMAGE_REL :: enum u16le {
|
|
I386_ABSOLUTE = 0x0000,
|
|
I386_DIR16 = 0x0001,
|
|
I386_REL16 = 0x0002,
|
|
I386_DIR32 = 0x0006,
|
|
I386_DIR32NB = 0x0007,
|
|
I386_SEG12 = 0x0009,
|
|
I386_SECTION = 0x000A,
|
|
I386_SECREL = 0x000B,
|
|
I386_TOKEN = 0x000C,
|
|
I386_SECREL7 = 0x000D,
|
|
I386_REL32 = 0x0014,
|
|
|
|
AMD64_ABSOLUTE = 0x0000,
|
|
AMD64_ADDR64 = 0x0001,
|
|
AMD64_ADDR32 = 0x0002,
|
|
AMD64_ADDR32NB = 0x0003,
|
|
AMD64_REL32 = 0x0004,
|
|
AMD64_REL32_1 = 0x0005,
|
|
AMD64_REL32_2 = 0x0006,
|
|
AMD64_REL32_3 = 0x0007,
|
|
AMD64_REL32_4 = 0x0008,
|
|
AMD64_REL32_5 = 0x0009,
|
|
AMD64_SECTION = 0x000A,
|
|
AMD64_SECREL = 0x000B,
|
|
AMD64_SECREL7 = 0x000C,
|
|
AMD64_TOKEN = 0x000D,
|
|
AMD64_SREL32 = 0x000E,
|
|
AMD64_PAIR = 0x000F,
|
|
AMD64_SSPAN32 = 0x0010,
|
|
|
|
ARM_ABSOLUTE = 0x0000,
|
|
ARM_ADDR32 = 0x0001,
|
|
ARM_ADDR32NB = 0x0002,
|
|
ARM_BRANCH24 = 0x0003,
|
|
ARM_BRANCH11 = 0x0004,
|
|
ARM_SECTION = 0x000E,
|
|
ARM_SECREL = 0x000F,
|
|
ARM_MOV32 = 0x0010,
|
|
|
|
THUMB_MOV32 = 0x0011,
|
|
THUMB_BRANCH20 = 0x0012,
|
|
THUMB_BRANCH24 = 0x0014,
|
|
THUMB_BLX23 = 0x0015,
|
|
|
|
ARM_PAIR = 0x0016,
|
|
|
|
ARM64_ABSOLUTE = 0x0000,
|
|
ARM64_ADDR32 = 0x0001,
|
|
ARM64_ADDR32NB = 0x0002,
|
|
ARM64_BRANCH26 = 0x0003,
|
|
ARM64_PAGEBASE_REL21 = 0x0004,
|
|
ARM64_REL21 = 0x0005,
|
|
ARM64_PAGEOFFSET_12A = 0x0006,
|
|
ARM64_PAGEOFFSET_12L = 0x0007,
|
|
ARM64_SECREL = 0x0008,
|
|
ARM64_SECREL_LOW12A = 0x0009,
|
|
ARM64_SECREL_HIGH12A = 0x000A,
|
|
ARM64_SECREL_LOW12L = 0x000B,
|
|
ARM64_TOKEN = 0x000C,
|
|
ARM64_SECTION = 0x000D,
|
|
ARM64_ADDR64 = 0x000E,
|
|
ARM64_BRANCH19 = 0x000F,
|
|
ARM64_BRANCH14 = 0x0010,
|
|
ARM64_REL32 = 0x0011,
|
|
}
|
|
|
|
PE_CODE_VIEW_SIGNATURE_RSDS :: u32le(0x5344_5352) |