Преобразовать опкоды в байты (ASM -> hex) - Assembler
Формулировка задачи:
Как программно, допустим на C/C++, преобразовать инструкции ассемблера в байты ?
Нашёл сайт который собственно и делает, то что нужно, но вопрос в том как это можно реализовать ?
к примеру
sub [rdi],eax mov eax,[rdi] mov [rsi],eax
Assembly
Raw Hex (zero bytes in bold):
29078B078906String Literal:
"\x29\x07\x8B\x07\x89\x06"Array Literal:
{ 0x29, 0x07, 0x8B, 0x07, 0x89, 0x06 }Disassembly
0: 29 07 sub DWORD PTR [rdi],eax 2: 8b 07 mov eax,DWORD PTR [rdi] 4: 89 06 mov DWORD PTR [rsi],eaxmov [ebx],eax mov ebx,eax mov eax,[esp+14]
std::string code = "mov [ebx],eax mov ebx,eax mov eax,[esp+14]"; bytes = asm2hex(code); /*byte bytes[] = { 0x89, 0x03, 0x8B, 0xD8, 0x8B, 0x44, 0x24, 0x14 };*/
Решение задачи: «Преобразовать опкоды в байты (ASM -> hex)»
textual
Листинг программы
std::string code = "mov [ebx],eax mov ebx,eax mov eax,[esp+14]"; bytes = asm2hex(code); /*byte bytes[] = { 0x89, 0x03, 0x8B, 0xD8, 0x8B, 0x44, 0x24, 0x14 };*/
Объяснение кода листинга программы
- Входные данные:
std::string code =
mov [ebx],eax\nmov ebx,eax\nmov eax,[esp+14]
; - Выполняется преобразование кода из языка ассемблера в шестнадцатеричный код: bytes = asm2hex(code);
- Результат преобразования: bytes = { 0x89, 0x03, 0x8B, 0xD8, 0x8B, 0x44, 0x24, 0x14 };
- Выделены названия и значения переменных:
- Названия переменных: code, bytes
- Значения переменных:
mov [ebx],eax
,mov ebx,eax
,mov eax,[esp+14]
, {0x89, 0x03, 0x8B, 0xD8, 0x8B, 0x44, 0x24, 0x14}
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д