|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 30, 2004 10:05:57 Приветствую господа! У меня простой вопрос по jump`ам. по jne и je в частности. Для примера маленькая программка: xor %eax,%eax mov $0x666,%eax cmpl $0x666,%eax jne aaa nop ... еще 8 штук. nop aaa: xor %eax,%eax inc %eax int $0x80 08048074 <_start>: 8048074: 31 c0 xor %eax,%eax 8048076: b8 66 06 00 00 mov $0x666,%eax 804807b: 3d 66 06 00 00 cmp $0x666,%eax 8048080: 74 0a je 804808c <aaa> 8048082: 90 nop ...skipped.. 804808b: 90 nop 0804808c <aaa>: 804808c: 31 c0 xor %eax,%eax 804808e: 40 inc %eax 804808f: cd 80 int $0x80 8048091: 8d 76 00 lea 0x0(%esi),%esi т.е. тут сразу видно что 74 0a можно понять как - перейти если верно на 10 байт. С этим все понятно. Так-же все понятно спрыжками в районе 256 байт. А вот дальше... Пишем туже самую программку, но nop`ов вставляем не 10, ну а 256 например. И вот что получаем: 08048074 <_start>: 8048074: 31 c0 xor %eax,%eax 8048076: b8 66 06 00 00 mov $0x666,%eax 804807b: 3d 66 06 00 00 cmp $0x666,%eax 8048080: 0f 84 04 01 00 00 je 804818a <aaa> 0804818a <aaa>: 804818a: 31 c0 xor %eax,%eax 804818c: 40 inc %eax 804818d: cd 80 int $0x80 804818f: 90 nop И вот тут хоть убейте не могу понять где в 0f 84 04 01 00 00 указан адрес 804818a. Да, кстати, если попробовать сделать переход не по je, а по jne то все совсем становится непонятным, т.к. переход будет выглядеть: 8048080: 0f 85 04 01 00 00 jne 804818a <aaa> Народ, объясните мне глупому, откуда он берет из этих строк адрес куда ему нужно переходить. Заранее спасибо. p.s. ОС - FreeBSD 4.10; Ассемблер - as 2.12.1; Линковщик - ld 2.12.1; дисассемблер - objdump 2.12.1 |
|
|
Дата: Июн 30, 2004 10:46:47 looser В 0f 84 04 01 00 00 первые 2 байта - опкод, остальные 4 - смещение цели относительно начала следующей за jmp иснтрукции (dword ). |
|
|
Дата: Июн 30, 2004 10:50:59 looser После команды _условного_ перехода следует дистанция до целевого адреса, а не сам целевой адрес. Команда _безусловного_ перехода имеет два вида - с дистанцией и с целевым адресом, компилятор умеет выбирать необходимый вид. |
|
|
Дата: Июн 30, 2004 12:46:18 А, помоему становится ясно :) 0f 84 04 01 00 00 ^^^^^ ^^^^^ опкод 104h -> 260 байт. т.е. прыгнуть через 260 байт. Я правильно понял? |
|
|
Дата: Июн 30, 2004 12:48:23 looser да. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.037 |