21способ обнулить регистр

Истории, приколы, анекдоты, шутки, прикольные картинки

Сообщение MAPA3bM » Сб июл 17, 2004 8:36 am

Как-то ночью, от нехуй делать был написан это текст. Здесь приводятся всякие способы обнуления регистров - от простых и до самых изощренных, но вот чего тут нет - так это полных извращений, типа обнуления по одному биту, автогенерируемого кода и т.п.

1. Обнуление MOV-ом

mov r, 0

2. Заменяем MOV на эквивалентные ему PUSH и POP

push <something-equal-to-0>
pop r

3. Самый хакерский способ: вычитаем регистр сам из себя.

sub r, r

4. Ксорим (тоже неплохой способ... но... как-то не то...)
Попутно © на название картины: "арвихакер, ксорящий ворды в уме"

xor r, r

5. Тоже неплохой способ, правда нахуй никому не нужный.

and r, 0

6. Более хитро: умножим на 0.

imul r, 0

7. Сдвиг (не путать со спрыгом).
X1+X2 в сумме больше/равно размера регистра в битах,
по отдельности меньше. Меньше потому, что берется по модулю.

shr/shl/sal r, X1 ; X1<=31, X2<=31, X1+X2>=32
shr/shl/sal r, X2 ;

8. Более извратный сдвиг.

clc
rcr/rcl, X1
clc
rcr/rcl, X2

9. Не совсем честный способ, но...

or reg, -1
inc/not reg

10. Обнулим (E)CX. (хотя так можно и охуеть)

loop $

11. Обнулим EDX.

shr eax,1
cdq

11. Обнулим AL. (AH=AL,AL=0)

aam 1

12. Обнулим AH

aad 0

13. Опять AL

clc
setalc ; opcode: 0xD6

14. Более хитро: прочитаем 0 из порта (например порт 81h)

mov dx, <some-port-number>
in al, dx

15. Опять AL

stc
setnc al

16. А тут кто-нибудь в доку полезет. 5 раз bsf либо bsr.

bsf r, r
bsf r, r
bsf r, r
bsf r, r
bsf r, r

17. Воспользуемся нулевым дескриптором из GDT

sgdt [esp-6]
mov r, [esp-4]
mov r, [r]

18. Считаем ноль из сегмента FS (PE файл)

mov r, fs:[10h] ; константа по вкусу, был бы ноль

19. Цикл (повторюсь: здесь главное не охуеть)

inc/dec r ; это несколько долго
jnz $-1

20. Вызовем какую-нить функцию с кривыми параметрами (вернется NULL в EAX)

call GetCurrentObject

21. Используем сопроцессор

fldz
fistp dword ptr [esp-4]
mov eax, [esp-4]

22, 23, 24, ...

Предлагаются также следующие варианты обнуления регистра:
- сканирование цепочки обработчкиков SEH до победного нуля
- сканирование цепочки хендлов файлов до нуля
(для этого надо сначала положить в регистр хендл открытого файла нулевого кольца, а перед этим перейти в ноль и открыть этот файл)
- считывание нуля из случайного файла
(потребуется генератор случайных чисел)
- вычисление синуса от Pi * n (умножать командой FMUL)
- сортировка памяти и поиск нулей

(не моё - а жаль..)
MAPA3bM
Полковник
 
Сообщений: 1270
Зарегистрирован: Вт дек 31, 2002 12:54 am
Откуда: Приморье
Пункты репутации: 0

Сообщение panda » Сб июл 17, 2004 9:21 am

тут нет ещё одного очень эффективного

mov esi, <src address of zero>
mov edi, <src address+1>
mov ecx, <numcycles>
rep movsd

а есть ещё mmx способы...
<div align="center">Панды занесены в Книгу рекордов Гиннеса как самые привлекательные из редких животных</div>
panda
Генерал-майор
 
Сообщений: 2459
Зарегистрирован: Вс авг 10, 2003 7:35 pm
Откуда: Владивосток
Пункты репутации: 0


Вернуться в Юмор

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron