#assembly #rust #disassembly
#сборка #Ржавчина #разборка
Вопрос:
Я новичок в Rust, и я возился с iced
библиотекой, чтобы разобрать материал, и это чрезвычайно полезно.
Чего я, похоже, не могу понять, так это как использовать Encoder
для генерации кодов операций из строки, а не Instruction
структуры.
Насколько я могу судить, iced-x86
документация этого не описывает.
Согласно документации: The encoder can be used to re-encode decoded instructions at any address
— ничего не говорится о кодировании инструкций из строки
Это то, чего я в основном пытаюсь достичь:
use iced_x86::*;
let instr = "xchg ah,[rdx rsi 16h]";
let mut encoder = Encoder::new(64);
match encoder.encode(amp;instr, 0x5555_5555) {
Ok(len) => assert_eq!(4, len),
Err(err) => panic!("{}", err),
}
// We're done, take ownership of the buffer
let buffer = encoder.take_buffer();
assert_eq!(vec![0x86, 0x64, 0x32, 0x16], buffer);
Комментарии:
1. Документ не описывает это, потому что такой функции нет .
2. Да, я видел эту проблему, мне было интересно, есть ли обходной путь
3. Нет, конечно, нет. Отсутствует целая функция 🙂 Но, конечно, существуют другие библиотеки ассемблера, которые поддерживают сборку из строки в двоичный буфер. Затем вы могли бы декодировать буфер. Конечно, это халтурно и расточительно.