This is part of a series of patches to upstream support for Mach-O chained fixups. This patch adds support for parsing the chained fixup load command and parsing the chained fixups header. It also puts into place the abstract interface that will be used to iterate over the fixups. Differential Revision: https://reviews.llvm.org/D113630
174 lines
5.2 KiB
YAML
174 lines
5.2 KiB
YAML
# This file was produced using:
|
|
# echo "int ext;" > a.c
|
|
# xcrun --sdk iphoneos clang -target arm64-apple-ios15.1 -o a.o a.c -c
|
|
# xcrun --sdk iphoneos clang -target arm64-apple-ios15.1 -dynamiclib a.o -o liba.dylib -install_name @executable_path/liba.dylib
|
|
# echo "extern int ext;" > b.c
|
|
# echo "int padding;" >> b.c
|
|
# echo "int *p = &ext + 4;" >> b.c
|
|
# xcrun --sdk iphoneos clang -target arm64-apple-ios15.1 -o b.o b.c -c
|
|
# xcrun --sdk iphoneos clang -target arm64-apple-ios15.1 -dynamiclib b.o -o libfixups.dylib -install_name @executable_path/libfixups.dylib -L. -la
|
|
--- !mach-o
|
|
FileHeader:
|
|
magic: 0xFEEDFACF
|
|
cputype: 0x100000C
|
|
cpusubtype: 0x0
|
|
filetype: 0x6
|
|
ncmds: 16
|
|
sizeofcmds: 816
|
|
flags: 0x100085
|
|
reserved: 0x0
|
|
LoadCommands:
|
|
- cmd: LC_SEGMENT_64
|
|
cmdsize: 152
|
|
segname: __TEXT
|
|
vmaddr: 0
|
|
vmsize: 16384
|
|
fileoff: 0
|
|
filesize: 16384
|
|
maxprot: 5
|
|
initprot: 5
|
|
nsects: 1
|
|
flags: 0
|
|
Sections:
|
|
- sectname: __text
|
|
segname: __TEXT
|
|
addr: 0x4000
|
|
size: 0
|
|
offset: 0x4000
|
|
align: 0
|
|
reloff: 0x0
|
|
nreloc: 0
|
|
flags: 0x80000400
|
|
reserved1: 0x0
|
|
reserved2: 0x0
|
|
reserved3: 0x0
|
|
content: ''
|
|
- cmd: LC_SEGMENT_64
|
|
cmdsize: 152
|
|
segname: __DATA
|
|
vmaddr: 16384
|
|
vmsize: 16384
|
|
fileoff: 16384
|
|
filesize: 16384
|
|
maxprot: 3
|
|
initprot: 3
|
|
nsects: 1
|
|
flags: 0
|
|
Sections:
|
|
- sectname: __data
|
|
segname: __DATA
|
|
addr: 0x4000
|
|
size: 8
|
|
offset: 0x4000
|
|
align: 3
|
|
reloff: 0x0
|
|
nreloc: 0
|
|
flags: 0x0
|
|
reserved1: 0x0
|
|
reserved2: 0x0
|
|
reserved3: 0x0
|
|
content: '0000001000000080'
|
|
- cmd: LC_SEGMENT_64
|
|
cmdsize: 72
|
|
segname: __LINKEDIT
|
|
vmaddr: 32768
|
|
vmsize: 16384
|
|
fileoff: 32768
|
|
filesize: 160
|
|
maxprot: 1
|
|
initprot: 1
|
|
nsects: 0
|
|
flags: 0
|
|
- cmd: LC_ID_DYLIB
|
|
cmdsize: 64
|
|
dylib:
|
|
name: 24
|
|
timestamp: 1
|
|
current_version: 0
|
|
compatibility_version: 0
|
|
Content: '@executable_path/libfixups.dylib'
|
|
ZeroPadBytes: 8
|
|
- cmd: LC_DYLD_CHAINED_FIXUPS
|
|
cmdsize: 16
|
|
dataoff: 32768
|
|
datasize: 88
|
|
- cmd: LC_DYLD_EXPORTS_TRIE
|
|
cmdsize: 16
|
|
dataoff: 32856
|
|
datasize: 16
|
|
- cmd: LC_SYMTAB
|
|
cmdsize: 24
|
|
symoff: 32880
|
|
nsyms: 2
|
|
stroff: 32912
|
|
strsize: 16
|
|
- cmd: LC_DYSYMTAB
|
|
cmdsize: 80
|
|
ilocalsym: 0
|
|
nlocalsym: 0
|
|
iextdefsym: 0
|
|
nextdefsym: 1
|
|
iundefsym: 1
|
|
nundefsym: 1
|
|
tocoff: 0
|
|
ntoc: 0
|
|
modtaboff: 0
|
|
nmodtab: 0
|
|
extrefsymoff: 0
|
|
nextrefsyms: 0
|
|
indirectsymoff: 0
|
|
nindirectsyms: 0
|
|
extreloff: 0
|
|
nextrel: 0
|
|
locreloff: 0
|
|
nlocrel: 0
|
|
- cmd: LC_UUID
|
|
cmdsize: 24
|
|
uuid: 56F7BCE0-C1A7-38E3-A90D-742D8E3D5FA9
|
|
- cmd: LC_BUILD_VERSION
|
|
cmdsize: 32
|
|
platform: 2
|
|
minos: 983296
|
|
sdk: 983552
|
|
ntools: 1
|
|
Tools:
|
|
- tool: 3
|
|
version: 46596096
|
|
- cmd: LC_SOURCE_VERSION
|
|
cmdsize: 16
|
|
version: 0
|
|
- cmd: LC_ENCRYPTION_INFO_64
|
|
cmdsize: 24
|
|
cryptoff: 16384
|
|
cryptsize: 0
|
|
cryptid: 0
|
|
pad: 0
|
|
- cmd: LC_LOAD_DYLIB
|
|
cmdsize: 56
|
|
dylib:
|
|
name: 24
|
|
timestamp: 2
|
|
current_version: 0
|
|
compatibility_version: 0
|
|
Content: '@executable_path/liba.dylib'
|
|
ZeroPadBytes: 5
|
|
- cmd: LC_LOAD_DYLIB
|
|
cmdsize: 56
|
|
dylib:
|
|
name: 24
|
|
timestamp: 2
|
|
current_version: 85917696
|
|
compatibility_version: 65536
|
|
Content: '/usr/lib/libSystem.B.dylib'
|
|
ZeroPadBytes: 6
|
|
- cmd: LC_FUNCTION_STARTS
|
|
cmdsize: 16
|
|
dataoff: 32872
|
|
datasize: 8
|
|
- cmd: LC_DATA_IN_CODE
|
|
cmdsize: 16
|
|
dataoff: 32880
|
|
datasize: 0
|
|
__LINKEDIT: 0000000020000000480000004C000000010000000100000000000000000000000300000000000000100000000000000018000000004006000040000000000000000000000100000001020000005F6578740000000000000000015F700006040080800100000000000000000000000000020000000F02000000400000000000000500000001000001000000000000000020005F70005F65787400000000000000
|
|
...
|