Написание инструкций в ассемблерном коде с использованием шестнадцатеричного - PullRequest
1 голос
/ 12 марта 2019

Я знаю, что следующий синтаксис - это обычный код сборки в x86:

.text
   .globl _strat
_start:
   push %rbp
...

Но я натолкнулся на следующий фрагмент кода и не совсем его понимаю.Представлены ли эти инструкции в шестнадцатеричном формате?

.text
   .globl _start
start:
.QWORD 0xc874b6f63392f085,0x3beac554c8f10c52,0x848,0x8600000004c,0x8c00000004c,0x920000001f4
...

Что представляет собой каждый ,?это список инструкций, объединенных в одну строку?

1 Ответ

2 голосов
/ 13 марта 2019

У меня есть дизассемблер, который я написал, который позволяет вставить в него дамп памяти. Но вы можете использовать objdump для дизассемблирования кода. Вот как я использовал objdump, чтобы разобрать это.

Сначала я создал двоичный файл с этим содержимым, запустив следующую программу. (Возможно, есть более простые способы; это то, что я выбрал.)

$ cat b.c
#include <stdint.h>
#include <stdio.h>

int main()
{
    static const uint64_t s[] = { 0xc874b6f63392f085,0x3beac554c8f10c52,0x848,0x8600000004c,0x8c00000004c,0x920000001f4 };
    fwrite(s, 1, sizeof s, stdout);
    return 0;
}

$ cc b.c
$ a.out > bin
$ objdump -D -b binary -m i386 -M intel bin
bin:     file format binary
Disassembly of section .data:

00000000 <.data>:
   0:   85 f0                   test   eax,esi
   2:   92                      xchg   edx,eax
   3:   33 f6                   xor    esi,esi
   5:   b6 74                   mov    dh,0x74
   7:   c8 52 0c f1             enter  0xc52,0xf1
   b:   c8 54 c5 ea             enter  0xc554,0xea
   f:   3b 48 08                cmp    ecx,DWORD PTR [eax+0x8]
  12:   00 00                   add    BYTE PTR [eax],al
  14:   00 00                   add    BYTE PTR [eax],al
  16:   00 00                   add    BYTE PTR [eax],al
  18:   4c                      dec    esp
  19:   00 00                   add    BYTE PTR [eax],al
  1b:   00 60 08                add    BYTE PTR [eax+0x8],ah
  1e:   00 00                   add    BYTE PTR [eax],al
  20:   4c                      dec    esp
  21:   00 00                   add    BYTE PTR [eax],al
  23:   00 c0                   add    al,al
  25:   08 00                   or     BYTE PTR [eax],al
  27:   00 f4                   add    ah,dh
  29:   01 00                   add    DWORD PTR [eax],eax
  2b:   00 20                   add    BYTE PTR [eax],ah
  2d:   09 00                   or     DWORD PTR [eax],eax
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...