-
Notifications
You must be signed in to change notification settings - Fork 18
Open
Description
As one can see in loader.h, some additional binding opcodes are defined:
#define BIND_OPCODE_THREADED 0xD0
#define BIND_SUBOPCODE_THREADED_SET_BIND_ORDINAL_TABLE_SIZE_ULEB 0x00
#define BIND_SUBOPCODE_THREADED_APPLY 0x01However, these are not found in this project's consts.rs:
Lines 844 to 855 in 4bf5fb1
| pub const BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB: u8 = 0x20; | |
| pub const BIND_OPCODE_SET_DYLIB_SPECIAL_IMM: u8 = 0x30; | |
| pub const BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM: u8 = 0x40; | |
| pub const BIND_OPCODE_SET_TYPE_IMM: u8 = 0x50; | |
| pub const BIND_OPCODE_SET_ADDEND_SLEB: u8 = 0x60; | |
| pub const BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB: u8 = 0x70; | |
| pub const BIND_OPCODE_ADD_ADDR_ULEB: u8 = 0x80; | |
| pub const BIND_OPCODE_DO_BIND: u8 = 0x90; | |
| pub const BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB: u8 = 0xA0; | |
| pub const BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED: u8 = 0xB0; | |
| pub const BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB: u8 = 0xC0; | |
and are therefore not handled in opcode.rs, which means that if a file contains some opcode of 0xd0 or 0xf0, then the parsing will fail on:
Lines 148 to 152 in 4bf5fb1
| (opcode, immediate) => { | |
| warn!("unknown bind opcode: {:x}, immediate = {}", opcode, immediate); | |
| None | |
| } |
while it should not. There should instead be some support for these cases.
Metadata
Metadata
Assignees
Labels
No labels