diff options
| author | Mark Rowe <mark@vector35.com> | 2026-02-27 17:47:37 -0800 |
|---|---|---|
| committer | Mark Rowe <mark@vector35.com> | 2026-02-27 19:17:27 -0800 |
| commit | 2b1fc96ebb746ee95c12b5a35cd4ffbe9a83d73e (patch) | |
| tree | ff0533ebc473d2827e819a139ce758f3223971f4 /view/macho/chained_fixups.cpp | |
| parent | d92b3684825220345b902f93b22b160e9401012b (diff) | |
[MachO] Ensure that weak bound symbols are not resolved to their import address
Fixes https://github.com/Vector35/binaryninja-api/issues/7989.
Also corrects an oversight from d92b3684 in handling of library ordinals
>= 128.
Diffstat (limited to 'view/macho/chained_fixups.cpp')
| -rw-r--r-- | view/macho/chained_fixups.cpp | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/view/macho/chained_fixups.cpp b/view/macho/chained_fixups.cpp index 9a8e8617..e71b34b8 100644 --- a/view/macho/chained_fixups.cpp +++ b/view/macho/chained_fixups.cpp @@ -247,7 +247,7 @@ ImportEntry ReadChainedImport32(BinaryReader& reader, std::span<const char> symb return { std::string_view(&symbolData[import.name_offset]), 0, - static_cast<int8_t>(import.lib_ordinal), + import.lib_ordinal > 0xF0 ? static_cast<int8_t>(import.lib_ordinal) : static_cast<int32_t>(import.lib_ordinal), (bool)import.weak_import, }; } @@ -259,7 +259,7 @@ ImportEntry ReadChainedImportAddend32(BinaryReader& reader, std::span<const char return { std::string_view(&symbolData[import.name_offset]), static_cast<uint32_t>(import.addend), - static_cast<int8_t>(import.lib_ordinal), + import.lib_ordinal > 0xF0 ? static_cast<int8_t>(import.lib_ordinal) : static_cast<int32_t>(import.lib_ordinal), (bool)import.weak_import, }; } @@ -271,7 +271,7 @@ ImportEntry ReadChainedImportAddend64(BinaryReader& reader, std::span<const char return { std::string_view(&symbolData[import.name_offset]), import.addend, - static_cast<int16_t>(import.lib_ordinal), + import.lib_ordinal > 0xFFF0 ? static_cast<int16_t>(import.lib_ordinal) : static_cast<int32_t>(import.lib_ordinal), (bool)import.weak_import, }; } |
