Преобразовать опкоды в байты (ASM -> hex) - Assembler

Узнай цену своей работы

Формулировка задачи:

Как программно, допустим на C/C++, преобразовать инструкции ассемблера в байты ?
sub [rdi],eax
mov eax,[rdi]
mov [rsi],eax

Assembly

Raw Hex (zero bytes in bold):

29078B078906

String 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],eax
Нашёл сайт который собственно и делает, то что нужно, но вопрос в том как это можно реализовать ? к примеру
mov [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 };*/

Объяснение кода листинга программы

  1. Входные данные: std::string code = mov [ebx],eax\nmov ebx,eax\nmov eax,[esp+14];
  2. Выполняется преобразование кода из языка ассемблера в шестнадцатеричный код: bytes = asm2hex(code);
  3. Результат преобразования: bytes = { 0x89, 0x03, 0x8B, 0xD8, 0x8B, 0x44, 0x24, 0x14 };
  4. Выделены названия и значения переменных:
    • Названия переменных: code, bytes
    • Значения переменных: mov [ebx],eax, mov ebx,eax, mov eax,[esp+14], {0x89, 0x03, 0x8B, 0xD8, 0x8B, 0x44, 0x24, 0x14}

Оцени полезность:

12   голосов , оценка 3.667 из 5