assembler
Michal Ludvig
michal-linux na logix.cz
Úterý Srpen 20 08:33:48 CEST 2002
Miloslav Trmac wrote:
> Michal Ludvig <michal-linux na logix.cz> wrote in message news:<3D60E459.6050700 na logix.cz>...
>
>>00000000 <.text>:
>> 0: bb ef be ad de mov $0xdeadbeef,%ebx
>> 5: 8d 76 00 lea 0x0(%esi),%esi
>>
>>(pozn. proc se tam navic dalo 'lea 0x0...' netusim a ted po tom patrat
>>nebudu).
>
> Zrejme zarovnani na 4 (8?) bytu.
To bezpochyby ano, ale proc tam nedava treba NOPy? Mozna ze je to takhle
rychlejsi. Kdyz mu vnutim zarovnani na 16B, tak vysledny kod vypada takhle:
00000000 <.text>:
0: bb ef be ad de mov $0xdeadbeef,%ebx
5: 8d 74 26 00 lea 0x0(%esi,1),%esi
9: 8d bc 27 00 00 00 00 lea 0x0(%edi,1),%edi
Kdyz prelozim ten stejny kod (s .align 16) na x86-64 tak je tam spousta
prave tech NOPu:
$ objdump -d tst.o
tst.o: file format elf64-x86-64prelozi
Disassembly of section .text:
0000000000000000 <.text>:
0: bb ef be ad de mov $0xdeadbeef,%ebx
5: 90 nop
6: 90 nop
7: 90 nop
8: 90 nop
9: 90 nop
a: 90 nop
b: 90 nop
c: 90 nop
d: 90 nop
e: 90 nop
f: 90 nop
A kdyz po x86-64 assembleru chci prelozit jen ten mov, tak ve vysledku
je opravdu jen ten mov a je mu uplne jedno, ze to je 5 bajtu. Asi zalezi
i na linkeru, jak si s tim poradi a assembler vi, co si muze dovolit.
Michal Ludvig
Další informace o konferenci Linux