Как процессор определяет код операции и операнды каждой инструкции: просмотр двоичного файла с помощью VIM [закрыто]

-1
05.06.2017, 07:43
1 ответ

Why are some lines added and some deleted when running :%!xxd and :%!xxd -b commands on vim

Поскольку vimсчитается 0x0aновой строкой, а двоичный файл содержит эти (74 в вашей версии ls... ), поэтому при переключении между необработанным двоичным файлом и какой-либо другой формой, эти 74 «строки» в двоичном файле будут удалены, а новые строки будут добавлены для (гораздо более подробного )шестнадцатеричного отображения. vimпросто подсчитывает число 0x0a, которое он видит.

Now i wonder how the processor determines each instruction's opcode and operands

Магия! Это сложно, и есть много книг на эту тему. Вкратце, компоновщик(или эквивалент)для конкретного бинарного формата (ELF в вашем случае, хотя существуют и другие форматы — a.out, Mach -O,... )укажет на начальный адрес

$ readelf -h /bin/ls
ELF Header:
  Magic:   7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF64
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              DYN (Shared object file)
  Machine:                           Advanced Micro Devices X86-64
  Version:                           0x1
  Entry point address:               0x37f0
...

что после того, как программа будет загружена в память, начнется выполнение кодов операций. Начальный адрес обычно (, но не может быть ), расположенным где-то в секции .textдвоичного файла :

.
$ objdump -DS /bin/ls | less -p.text
...

Что в моей системе OpenBSD показывает:

Disassembly of section.text:

00000000000037f0 <revnamecmp-0x460>:
    37f0:       49 89 e4                mov    %rsp,%r12
    37f3:       48 83 ec 08             sub    $0x8,%rsp
    37f7:       48 83 e4 f0             and    $0xfffffffffffffff0,%rsp
    37fb:       48 83 c4 08             add    $0x8,%rsp
...

Книги, на которые, возможно, стоит взглянуть, включают "Assembly Language Step -by -Step" Джеффа Дунтеманна и для ELF "Learning Linux Binary Analysis" Райана О'Нила.

3
28.01.2020, 05:07

Теги

Похожие вопросы