1; RUN: rm -rf %t 2; RUN: split-file %s %t 3; RUN: yaml2obj %t/payload-extended.yaml -o %t/payload-extended.dylib 4; RUN: llvm-objdump --macho --exports-trie %t/payload-extended.dylib 2>&1 | FileCheck %s 5 6; CHECK: 0x00003FB0 _foo 7 8; RUN: yaml2obj %t/payload-truncated.yaml -o %t/payload-truncated.dylib 9; RUN: not llvm-objdump --macho --exports-trie %t/payload-truncated.dylib 2>&1 | FileCheck %s --check-prefix=WRONG_SIZE 10 11; WRONG_SIZE: truncated or malformed object (inconsistent export info size: 0x2 where actual size was: 0x3 in export trie data at node: 0x8) 12 13# Yaml was manually crafted to have an export trie with a node entry 14# where it's payload is larger than the size needed to read it. 15;--- payload-extended.yaml 16--- !mach-o 17FileHeader: 18 magic: 0xFEEDFACF 19 cputype: 0x100000C 20 cpusubtype: 0x0 21 filetype: 0x6 22 ncmds: 13 23 sizeofcmds: 680 24 flags: 0x100085 25 reserved: 0x0 26LoadCommands: 27 - cmd: LC_SEGMENT_64 28 cmdsize: 232 29 segname: __TEXT 30 vmaddr: 0 31 vmsize: 16384 32 fileoff: 0 33 filesize: 16384 34 maxprot: 5 35 initprot: 5 36 nsects: 2 37 flags: 0 38 Sections: 39 - sectname: __text 40 segname: __TEXT 41 addr: 0x3FB0 42 size: 8 43 offset: 0x3FB0 44 align: 2 45 reloff: 0x0 46 nreloc: 0 47 flags: 0x80000400 48 reserved1: 0x0 49 reserved2: 0x0 50 reserved3: 0x0 51 content: 20008052C0035FD6 52 - sectname: __unwind_info 53 segname: __TEXT 54 addr: 0x3FB8 55 size: 72 56 offset: 0x3FB8 57 align: 2 58 reloff: 0x0 59 nreloc: 0 60 flags: 0x0 61 reserved1: 0x0 62 reserved2: 0x0 63 reserved3: 0x0 64 content: 010000001C000000000000001C000000000000001C00000002000000B03F00003400000034000000B93F00000000000034000000030000000C000100100001000000000000000002 65 - cmd: LC_SEGMENT_64 66 cmdsize: 72 67 segname: __LINKEDIT 68 vmaddr: 16384 69 vmsize: 16384 70 fileoff: 16384 71 filesize: 361 72 maxprot: 1 73 initprot: 1 74 nsects: 0 75 flags: 0 76 - cmd: LC_ID_DYLIB 77 cmdsize: 48 78 dylib: 79 name: 24 80 timestamp: 1 81 current_version: 0 82 compatibility_version: 0 83 Content: '@rpath/libfoo.dylib' 84 ZeroPadBytes: 5 85 - cmd: LC_DYLD_INFO_ONLY 86 cmdsize: 48 87 rebase_off: 0 88 rebase_size: 0 89 bind_off: 0 90 bind_size: 0 91 weak_bind_off: 0 92 weak_bind_size: 0 93 lazy_bind_off: 0 94 lazy_bind_size: 0 95 export_off: 16384 96 export_size: 16 97 - cmd: LC_SYMTAB 98 cmdsize: 24 99 symoff: 16408 100 nsyms: 2 101 stroff: 16440 102 strsize: 24 103 - cmd: LC_DYSYMTAB 104 cmdsize: 80 105 ilocalsym: 0 106 nlocalsym: 0 107 iextdefsym: 0 108 nextdefsym: 1 109 iundefsym: 1 110 nundefsym: 1 111 tocoff: 0 112 ntoc: 0 113 modtaboff: 0 114 nmodtab: 0 115 extrefsymoff: 0 116 nextrefsyms: 0 117 indirectsymoff: 0 118 nindirectsyms: 0 119 extreloff: 0 120 nextrel: 0 121 locreloff: 0 122 nlocrel: 0 123 - cmd: LC_UUID 124 cmdsize: 24 125 uuid: A2CF51D8-828B-3E0F-B8FA-0DF9C5D1C91A 126 - cmd: LC_BUILD_VERSION 127 cmdsize: 32 128 platform: 1 129 minos: 721664 130 sdk: 917504 131 ntools: 1 132 Tools: 133 - tool: 3 134 version: 59441152 135 - cmd: LC_SOURCE_VERSION 136 cmdsize: 16 137 version: 0 138 - cmd: LC_LOAD_DYLIB 139 cmdsize: 56 140 dylib: 141 name: 24 142 timestamp: 2 143 current_version: 87556096 144 compatibility_version: 65536 145 Content: '/usr/lib/libSystem.B.dylib' 146 ZeroPadBytes: 6 147 - cmd: LC_FUNCTION_STARTS 148 cmdsize: 16 149 dataoff: 16400 150 datasize: 8 151 - cmd: LC_DATA_IN_CODE 152 cmdsize: 16 153 dataoff: 16408 154 datasize: 0 155 - cmd: LC_CODE_SIGNATURE 156 cmdsize: 16 157 dataoff: 16464 158 datasize: 281 159LinkEditData: 160 ExportTrie: 161 TerminalSize: 0 162 NodeOffset: 0 163 Name: '' 164 Flags: 0x0 165 Address: 0x0 166 Other: 0x0 167 ImportName: '' 168 Children: 169 - TerminalSize: 4 170 NodeOffset: 8 171 Name: _foo 172 Flags: 0x0 173 Address: 0x3FB0 174 Other: 0x0 175 ImportName: '' 176 NameList: 177 - n_strx: 2 178 n_type: 0xF 179 n_sect: 1 180 n_desc: 0 181 n_value: 16304 182 - n_strx: 7 183 n_type: 0x1 184 n_sect: 0 185 n_desc: 256 186 n_value: 0 187 StringTable: 188 - ' ' 189 - _foo 190 - dyld_stub_binder 191 FunctionStarts: [ 0x3FB0 ] 192... 193 194# Yaml was manually crafted to have an export trie with a node entry 195# where it's payload is smaller than the size needed to read it. 196;--- payload-truncated.yaml 197--- !mach-o 198FileHeader: 199 magic: 0xFEEDFACF 200 cputype: 0x100000C 201 cpusubtype: 0x0 202 filetype: 0x6 203 ncmds: 13 204 sizeofcmds: 680 205 flags: 0x100085 206 reserved: 0x0 207LoadCommands: 208 - cmd: LC_SEGMENT_64 209 cmdsize: 232 210 segname: __TEXT 211 vmaddr: 0 212 vmsize: 16384 213 fileoff: 0 214 filesize: 16384 215 maxprot: 5 216 initprot: 5 217 nsects: 2 218 flags: 0 219 Sections: 220 - sectname: __text 221 segname: __TEXT 222 addr: 0x3FB0 223 size: 8 224 offset: 0x3FB0 225 align: 2 226 reloff: 0x0 227 nreloc: 0 228 flags: 0x80000400 229 reserved1: 0x0 230 reserved2: 0x0 231 reserved3: 0x0 232 content: 20008052C0035FD6 233 - sectname: __unwind_info 234 segname: __TEXT 235 addr: 0x3FB8 236 size: 72 237 offset: 0x3FB8 238 align: 2 239 reloff: 0x0 240 nreloc: 0 241 flags: 0x0 242 reserved1: 0x0 243 reserved2: 0x0 244 reserved3: 0x0 245 content: 010000001C000000000000001C000000000000001C00000002000000B03F00003400000034000000B93F00000000000034000000030000000C000100100001000000000000000002 246 - cmd: LC_SEGMENT_64 247 cmdsize: 72 248 segname: __LINKEDIT 249 vmaddr: 16384 250 vmsize: 16384 251 fileoff: 16384 252 filesize: 361 253 maxprot: 1 254 initprot: 1 255 nsects: 0 256 flags: 0 257 - cmd: LC_ID_DYLIB 258 cmdsize: 48 259 dylib: 260 name: 24 261 timestamp: 1 262 current_version: 0 263 compatibility_version: 0 264 Content: '@rpath/libfoo.dylib' 265 ZeroPadBytes: 5 266 - cmd: LC_DYLD_INFO_ONLY 267 cmdsize: 48 268 rebase_off: 0 269 rebase_size: 0 270 bind_off: 0 271 bind_size: 0 272 weak_bind_off: 0 273 weak_bind_size: 0 274 lazy_bind_off: 0 275 lazy_bind_size: 0 276 export_off: 16384 277 export_size: 16 278 - cmd: LC_SYMTAB 279 cmdsize: 24 280 symoff: 16408 281 nsyms: 2 282 stroff: 16440 283 strsize: 24 284 - cmd: LC_DYSYMTAB 285 cmdsize: 80 286 ilocalsym: 0 287 nlocalsym: 0 288 iextdefsym: 0 289 nextdefsym: 1 290 iundefsym: 1 291 nundefsym: 1 292 tocoff: 0 293 ntoc: 0 294 modtaboff: 0 295 nmodtab: 0 296 extrefsymoff: 0 297 nextrefsyms: 0 298 indirectsymoff: 0 299 nindirectsyms: 0 300 extreloff: 0 301 nextrel: 0 302 locreloff: 0 303 nlocrel: 0 304 - cmd: LC_UUID 305 cmdsize: 24 306 uuid: A2CF51D8-828B-3E0F-B8FA-0DF9C5D1C91A 307 - cmd: LC_BUILD_VERSION 308 cmdsize: 32 309 platform: 1 310 minos: 721664 311 sdk: 917504 312 ntools: 1 313 Tools: 314 - tool: 3 315 version: 59441152 316 - cmd: LC_SOURCE_VERSION 317 cmdsize: 16 318 version: 0 319 - cmd: LC_LOAD_DYLIB 320 cmdsize: 56 321 dylib: 322 name: 24 323 timestamp: 2 324 current_version: 87556096 325 compatibility_version: 65536 326 Content: '/usr/lib/libSystem.B.dylib' 327 ZeroPadBytes: 6 328 - cmd: LC_FUNCTION_STARTS 329 cmdsize: 16 330 dataoff: 16400 331 datasize: 8 332 - cmd: LC_DATA_IN_CODE 333 cmdsize: 16 334 dataoff: 16408 335 datasize: 0 336 - cmd: LC_CODE_SIGNATURE 337 cmdsize: 16 338 dataoff: 16464 339 datasize: 281 340LinkEditData: 341 ExportTrie: 342 TerminalSize: 0 343 NodeOffset: 0 344 Name: '' 345 Flags: 0x0 346 Address: 0x0 347 Other: 0x0 348 ImportName: '' 349 Children: 350 - TerminalSize: 2 351 NodeOffset: 8 352 Name: _foo 353 Flags: 0x0 354 Address: 0x3FB0 355 Other: 0x0 356 ImportName: '' 357 NameList: 358 - n_strx: 2 359 n_type: 0xF 360 n_sect: 1 361 n_desc: 0 362 n_value: 16304 363 - n_strx: 7 364 n_type: 0x1 365 n_sect: 0 366 n_desc: 256 367 n_value: 0 368 StringTable: 369 - ' ' 370 - _foo 371 - dyld_stub_binder 372 FunctionStarts: [ 0x3FB0 ] 373... 374