· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.UNIX —› [at&t] Добавление "лишних" nop`ов.

Посл.отвђт Сообщенiе


Дата: Июн 30, 2004 10:01:23

Приветствую!
вот какую штуку я заметил. Имеем какую-нить совсем простенькую программку. Ну например:

xor %eax,%eax
push %eax
pushl $0x6c77656b
movl %esp,%ebx
pushl $0777
pushl %ebx
pushl $136
push %eax
int $0x80
xor %eax,%eax
push $1
push %eax
int $0x80

далее делаем:
% objdump -D filename

filename: file format elf32-i386

Disassembly of section .text:

08048074 <_start>:
8048074: 31 c0 xor %eax,%eax
8048076: 50 push %eax
8048077: 68 6b 65 77 6c push $0x6c77656b
804807c: 89 e3 mov %esp,%ebx
804807e: 68 ff 01 00 00 push $0x1ff
8048083: 53 push %ebx
8048084: 68 88 00 00 00 push $0x88
8048089: 50 push %eax
804808a: cd 80 int $0x80
804808c: 31 c0 xor %eax,%eax
804808e: 6a 01 push $0x1
8048090: 50 push %eax
8048091: cd 80 int $0x80
8048093: 90 nop
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Disassembly of section .data:

вот получили дисассемблерный листинг.
Я посмотрел листинги еще наскольких маленьких программок, и
всегда в конце добавляется nop. Компилятор as (v 2.12.1).
Линковщик - ld (v 2.12.1).
Вопрос: а почему/зачем в конец всегда добавляется этот
самый nop?

заранее спасибо за ответы :-)


Дата: Июн 30, 2004 10:05:44

А он туда кем добавляется ассемблером, линковщиком или дизассемблером?


Дата: Июн 30, 2004 10:31:18

А черт его знает :)
Но явно не дисассемблером. Если в hex`е бинарник смотреть, то один/несколько 90h в конце .text сразу в глаза бросаются :)


Дата: Июн 30, 2004 10:54:28

> всегда в конце добавляется nop

Всегда ли? Смахивает на выравнивание функции до четного адреса.


Дата: Июн 30, 2004 10:58:22

Dr.Golova
Ага, более того, длина секции становится 0x20.


Дата: Июн 30, 2004 12:41:22

Про выравнивание я тоже подумал. Сегодня вечером поэкспериментирую, и завтра расскажу что получилось.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.069