Skip to content

Commit faf6ba4

Browse files
authored
[llvm-readobj][COFF] Implement --coff-pseudoreloc in llvm-readobj to dump runtime pseudo-relocation records (#151816)
MinGW toolchain uses "runtime pseudo-relocation" mechanism to support auto-importing symbols from DLLs. There is no commonly used tools for dump the pseudo-relocation records, so we implement that functionality in llvm-readobj.
1 parent 5bae366 commit faf6ba4

File tree

7 files changed

+788
-0
lines changed

7 files changed

+788
-0
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
--- !COFF
2+
OptionalHeader:
3+
AddressOfEntryPoint: 4096
4+
ImageBase: 4194304
5+
SectionAlignment: 4096
6+
FileAlignment: 512
7+
MajorOperatingSystemVersion: 6
8+
MinorOperatingSystemVersion: 0
9+
MajorImageVersion: 0
10+
MinorImageVersion: 0
11+
MajorSubsystemVersion: 6
12+
MinorSubsystemVersion: 0
13+
Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
14+
DLLCharacteristics: [ IMAGE_DLL_CHARACTERISTICS_NX_COMPAT, IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE ]
15+
SizeOfStackReserve: 1048576
16+
SizeOfStackCommit: 4096
17+
SizeOfHeapReserve: 1048576
18+
SizeOfHeapCommit: 4096
19+
ExportTable:
20+
RelativeVirtualAddress: 0
21+
Size: 0
22+
ImportTable:
23+
RelativeVirtualAddress: 8288
24+
Size: 60
25+
ResourceTable:
26+
RelativeVirtualAddress: 0
27+
Size: 0
28+
ExceptionTable:
29+
RelativeVirtualAddress: 0
30+
Size: 0
31+
CertificateTable:
32+
RelativeVirtualAddress: 0
33+
Size: 0
34+
BaseRelocationTable:
35+
RelativeVirtualAddress: 0
36+
Size: 0
37+
Debug:
38+
RelativeVirtualAddress: 0
39+
Size: 0
40+
Architecture:
41+
RelativeVirtualAddress: 0
42+
Size: 0
43+
GlobalPtr:
44+
RelativeVirtualAddress: 0
45+
Size: 0
46+
TlsTable:
47+
RelativeVirtualAddress: 0
48+
Size: 0
49+
LoadConfigTable:
50+
RelativeVirtualAddress: 0
51+
Size: 0
52+
BoundImport:
53+
RelativeVirtualAddress: 0
54+
Size: 0
55+
IAT:
56+
RelativeVirtualAddress: 8368
57+
Size: 20
58+
DelayImportDescriptor:
59+
RelativeVirtualAddress: 0
60+
Size: 0
61+
ClrRuntimeHeader:
62+
RelativeVirtualAddress: 0
63+
Size: 0
64+
header:
65+
Machine: IMAGE_FILE_MACHINE_I386
66+
Characteristics: [ IMAGE_FILE_RELOCS_STRIPPED, IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_32BIT_MACHINE ]
67+
sections:
68+
- Name: .text
69+
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
70+
VirtualAddress: 4096
71+
VirtualSize: 60
72+
SectionData: A1003040000FBE008B0D043040000FBE0901C1A1083040000FBE10A1103040000FBE0001D001C8C39090909090909090A1502040002B0508204000C3
73+
SizeOfRawData: 512
74+
- Name: .rdata
75+
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
76+
VirtualAddress: 8192
77+
VirtualSize: 254
78+
SectionData: 3377115566228844000000000000000001000000[[SYMBOL0=B0200000]]0030000020000000[[SYMBOL1=B4200000]]0430000020000000[[SYMBOL2=BC200000]]0830000020000000BC2000000C30000020000000B02000001030000020000000FFFFFFFF00000000FFFFFFFF000000009C2000000000000000000000DC200000B0200000A82000000000000000000000ED200000BC2000000000000000000000000000000000000000000000C4200000CC20000000000000D420000000000000C4200000CC20000000000000D420000000000000000073796D310000000073796D320000000073796D3300006578706F7274312E693338362E646C6C006578706F7274322E693338362E646C6C00
79+
SizeOfRawData: 512
80+
- Name: .data
81+
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
82+
VirtualAddress: 12288
83+
VirtualSize: 20
84+
SectionData: B1204000B6204000BD204000BD204000B2204000
85+
SizeOfRawData: 512
86+
symbols:
87+
- Name: _start
88+
Value: 0
89+
SectionNumber: 1
90+
SimpleType: IMAGE_SYM_TYPE_NULL
91+
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
92+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
93+
- Name: _local2a
94+
Value: 4
95+
SectionNumber: [[SECTION_OF_LOCAL2A=3]]
96+
SimpleType: IMAGE_SYM_TYPE_NULL
97+
ComplexType: IMAGE_SYM_DTYPE_NULL
98+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
99+
- Name: _local3a
100+
Value: 8
101+
SectionNumber: 3
102+
SimpleType: IMAGE_SYM_TYPE_NULL
103+
ComplexType: IMAGE_SYM_DTYPE_NULL
104+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
105+
- Name: __pei386_runtime_relocator
106+
Value: 48
107+
SectionNumber: 1
108+
SimpleType: IMAGE_SYM_TYPE_NULL
109+
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
110+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
111+
- Name: ___RUNTIME_PSEUDO_RELOC_LIST_END__
112+
Value: [[END=80]]
113+
SectionNumber: 2
114+
SimpleType: IMAGE_SYM_TYPE_NULL
115+
ComplexType: IMAGE_SYM_DTYPE_NULL
116+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
117+
- Name: ___RUNTIME_PSEUDO_RELOC_LIST__
118+
Value: [[BEGIN=8]]
119+
SectionNumber: [[SECTION_OF_BEGIN=2]]
120+
SimpleType: IMAGE_SYM_TYPE_NULL
121+
ComplexType: IMAGE_SYM_DTYPE_NULL
122+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
123+
...
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
--- !COFF
2+
OptionalHeader:
3+
AddressOfEntryPoint: 4096
4+
ImageBase: 5368709120
5+
SectionAlignment: 4096
6+
FileAlignment: 512
7+
MajorOperatingSystemVersion: 6
8+
MinorOperatingSystemVersion: 0
9+
MajorImageVersion: 0
10+
MinorImageVersion: 0
11+
MajorSubsystemVersion: 6
12+
MinorSubsystemVersion: 0
13+
Subsystem: IMAGE_SUBSYSTEM_WINDOWS_CUI
14+
DLLCharacteristics: [ IMAGE_DLL_CHARACTERISTICS_HIGH_ENTROPY_VA, IMAGE_DLL_CHARACTERISTICS_NX_COMPAT, IMAGE_DLL_CHARACTERISTICS_TERMINAL_SERVER_AWARE ]
15+
SizeOfStackReserve: 1048576
16+
SizeOfStackCommit: 4096
17+
SizeOfHeapReserve: 1048576
18+
SizeOfHeapCommit: 4096
19+
ExportTable:
20+
RelativeVirtualAddress: 0
21+
Size: 0
22+
ImportTable:
23+
RelativeVirtualAddress: 8304
24+
Size: 60
25+
ResourceTable:
26+
RelativeVirtualAddress: 0
27+
Size: 0
28+
ExceptionTable:
29+
RelativeVirtualAddress: 0
30+
Size: 0
31+
CertificateTable:
32+
RelativeVirtualAddress: 0
33+
Size: 0
34+
BaseRelocationTable:
35+
RelativeVirtualAddress: 0
36+
Size: 0
37+
Debug:
38+
RelativeVirtualAddress: 0
39+
Size: 0
40+
Architecture:
41+
RelativeVirtualAddress: 0
42+
Size: 0
43+
GlobalPtr:
44+
RelativeVirtualAddress: 0
45+
Size: 0
46+
TlsTable:
47+
RelativeVirtualAddress: 0
48+
Size: 0
49+
LoadConfigTable:
50+
RelativeVirtualAddress: 0
51+
Size: 0
52+
BoundImport:
53+
RelativeVirtualAddress: 0
54+
Size: 0
55+
IAT:
56+
RelativeVirtualAddress: 8408
57+
Size: 40
58+
DelayImportDescriptor:
59+
RelativeVirtualAddress: 0
60+
Size: 0
61+
ClrRuntimeHeader:
62+
RelativeVirtualAddress: 0
63+
Size: 0
64+
header:
65+
Machine: IMAGE_FILE_MACHINE_AMD64
66+
Characteristics: [ IMAGE_FILE_RELOCS_STRIPPED, IMAGE_FILE_EXECUTABLE_IMAGE, IMAGE_FILE_LARGE_ADDRESS_AWARE ]
67+
sections:
68+
- Name: .text
69+
Characteristics: [ IMAGE_SCN_CNT_CODE, IMAGE_SCN_MEM_EXECUTE, IMAGE_SCN_MEM_READ ]
70+
VirtualAddress: 4096
71+
VirtualSize: 61
72+
SectionData: 488B05F91F00000FBE00488B0DF71F00000FBE0901C1488B05F31F00000FBE10488B05F91F00000FBE0001D001C8C3908B051A1000002B05CC0F0000C3
73+
SizeOfRawData: 512
74+
- Name: .rdata
75+
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ ]
76+
VirtualAddress: 8192
77+
VirtualSize: 318
78+
SectionData: 3377115566228844000000000000000001000000[[SYMBOL0=E8200000]]0030000040000000[[SYMBOL1=F0200000]]0830000040000000[[SYMBOL2=D8200000]]1030000040000000D82000001830000040000000E82000002030000040000000FFFFFFFFFFFFFFFF0000000000000000FFFFFFFFFFFFFFFF0000000000000000B0200000000000000000000018210000D8200000C020000000000000000000002B210000E82000000000000000000000000000000000000000000000000000000021000000000000000000000000000008210000000000001021000000000000000000000000000000210000000000000000000000000000082100000000000010210000000000000000000000000000000073796D330000000073796D310000000073796D3200006578706F7274322E7838365F36342E646C6C006578706F7274312E7838365F36342E646C6C00
79+
SizeOfRawData: 512
80+
- Name: .data
81+
Characteristics: [ IMAGE_SCN_CNT_INITIALIZED_DATA, IMAGE_SCN_MEM_READ, IMAGE_SCN_MEM_WRITE ]
82+
VirtualAddress: 12288
83+
VirtualSize: 40
84+
SectionData: E920004001000000F220004001000000D920004001000000D920004001000000EA20004001000000
85+
SizeOfRawData: 512
86+
symbols:
87+
- Name: start
88+
Value: 0
89+
SectionNumber: 1
90+
SimpleType: IMAGE_SYM_TYPE_NULL
91+
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
92+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
93+
- Name: local2a
94+
Value: 8
95+
SectionNumber: [[SECTION_OF_LOCAL2A=3]]
96+
SimpleType: IMAGE_SYM_TYPE_NULL
97+
ComplexType: IMAGE_SYM_DTYPE_NULL
98+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
99+
- Name: local3a
100+
Value: 16
101+
SectionNumber: 3
102+
SimpleType: IMAGE_SYM_TYPE_NULL
103+
ComplexType: IMAGE_SYM_DTYPE_NULL
104+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
105+
- Name: _pei386_runtime_relocator
106+
Value: 48
107+
SectionNumber: 1
108+
SimpleType: IMAGE_SYM_TYPE_NULL
109+
ComplexType: IMAGE_SYM_DTYPE_FUNCTION
110+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
111+
- Name: __RUNTIME_PSEUDO_RELOC_LIST_END__
112+
Value: [[END=80]]
113+
SectionNumber: 2
114+
SimpleType: IMAGE_SYM_TYPE_NULL
115+
ComplexType: IMAGE_SYM_DTYPE_NULL
116+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
117+
- Name: __RUNTIME_PSEUDO_RELOC_LIST__
118+
Value: [[BEGIN=8]]
119+
SectionNumber: [[SECTION_OF_BEGIN=2]]
120+
SimpleType: IMAGE_SYM_TYPE_NULL
121+
ComplexType: IMAGE_SYM_DTYPE_NULL
122+
StorageClass: IMAGE_SYM_CLASS_EXTERNAL
123+
...

0 commit comments

Comments
 (0)