операнд инструкции по сборке / разборке - PullRequest
2 голосов
/ 15 апреля 2011

Глядя на некоторые коды сборки и разборки в «Руководстве по кодировщику оболочки», я обнаружил, что операнд последовательности для инструкции не совпадает.

Например, при сборке:

mov ebx,0

и, при разборке:

mov 0,ebx

Почему это так?

1 Ответ

11 голосов
/ 15 апреля 2011

Либо что-то не так с вашим ассемблером или дизассемблером, либо существует простое несоответствие в нотации.

Например, две общие нотации для x86 (Intel и AT & T) меняют порядок операндов, например:

mov  ebx, 0     ; Intel
mov  $0, %ebx   ; AT&T

Оба эти значения означают одно и то же, устанавливая регистр ebx на ноль.

В Справочнике по кодировщику, на который вы ссылаетесь, используемые инструменты используют две разные записи,Например, на одной странице (стр. 39 в моем издании) вы видите этот текст:


Давайте напишем эти три шага в сборке.Затем мы можем получить двоичный файл ELF;из этого файла мы наконец можем извлечь коды операций.

Section .text
global _start
_start:
    mov ebx,0
    mov eax,1
    int 0x80

Теперь мы хотим использовать ассемблер nasm для создания нашего объектного файла, а затем использовать компоновщик GNU для связывания объектафайлы:

[slap@0day root] nasm -f elf exit_shellcode.asm
[slap@0day root] ld -o exit_shellcode exit_shellcode.o

Наконец, мы готовы получить наши коды операций.В этом примере мы будем использовать objdump.Утилита objdump - это простой инструмент, который отображает содержимое объектных файлов в удобочитаемой форме.Он также хорошо печатает код операции при отображении содержимого объектного файла, что делает его полезным при разработке шелл-кода.Запустите нашу программу через objdump, например:

[slap@0day root] objdump -d exit_shellcode
exit_shellcode:file format elf32-i386
Disassembly of section .text:
08048080 <.text>:
8048080: bb 00 00 00 00 mov $0x0,%ebx
8048085: b8 01 00 00 00 mov $0x1,%eax
804808a: cd 80          int $0x80

Из этого вы можете совершенно ясно увидеть, что nasm ожидает запись Intel , но objdump производит AT & T запись.Надо просто привыкнуть к различиям между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...