konrad-kruczynski / elfsharp

Pure managed C# library for reading ELF, UImage, Mach-O binaries.
https://elfsharp.it
Other
159 stars 57 forks source link

Get InvalidOperationException while paring Mach-O object file #77

Closed yongyan-gh closed 3 years ago

yongyan-gh commented 3 years ago

Since in segment code it check if the name field from segment should be same as segment name field from section.

According to this article:

For compactness, an intermediate object file contains only one segment. This segment has no name; it contains all the sections destined ultimately for different segments in the final object file. The data structure that defines a section contains the name of the segment the section is intended for, and the static linker places each section in the final object file accordingly. The segment name can be empty and section's segment name have values if its intermediate Mach-O object file.

Here is the segment/sections information from a sample Mach-O object file with dwarf debugging information. It has only 1 segment and name is empty, but its sections name are not empty.

                SegName: __TEXT  | SecName: __text | Address: 0 | Size: 27 | Offset: 458 | Align: 0
                SegName: __TEXT  | SecName: __cstring | Address: 27 | Size: 1d | Offset: 47f | Align: 0
                SegName: __DWARF | SecName: __debug_frame | Address: 48 | Size: 48 | Offset: 4a0 | Align: 3
                SegName: __TEXT  | SecName: __eh_frame | Address: 90 | Size: 50 | Offset: 4e8 | Align: 3
                SegName: __DWARF | SecName: __debug_info | Address: e0 | Size: 1a1 | Offset: 538 | Align: 0
                SegName: __DWARF | SecName: __debug_abbrev | Address: 281 | Size: 7f | Offset: 6d9 | Align: 0
                SegName: __DWARF | SecName: __debug_pubnames | Address: 300 | Size: 27 | Offset: 758 | Align: 0
                SegName: __DWARF | SecName: __debug_pubtypes | Address: 327 | Size: cb | Offset: 77f | Align: 0
                SegName: __DWARF | SecName: __debug_aranges | Address: 3f2 | Size: 30 | Offset: 84a | Align: 0
                SegName: __DWARF | SecName: __debug_line | Address: 422 | Size: a7 | Offset: 87a | Align: 0
                SegName: __DWARF | SecName: __debug_str | Address: 4c9 | Size: 0 | Offset: 921 | Align: 0
yongyan-gh commented 3 years ago

Created PR #78 to resolve the issue, please review.