ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

23 способа получить в регистре единицу.
  #1  
Старый 03.10.2007, 18:19
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

Репутация: 1564
Отправить сообщение для 0x0c0de с помощью ICQ
По умолчанию 23 способа получить в регистре единицу.

23 способа получить в регистре единицу.
От самых простых до самых извратных. Хорошая разминка для мозгов.

1. непохек
Код:
 
mov eax,1.
Просто положить в регистр единицу

2.
Код:
sub eax,eax /xor eax,eax (по отдельности не рассматриваю)
   inc eax
Красиво, довольно коротко. Обнуляем, инкрементируем....

3.
Код:
 imul eax,0
    inc eax
Тоже красиво. Обнуляем, инкрементируем

4. Сопроцессор, но тут нужна дополнительная переменная. mem dword ?
Код:
finit
fld1
fist mem
mov eax,mem
в eax - теперь 1
Сначала мы инициализируем сопроцессор (finit), потом загружаем в st0 1, потом отправляем
содержимое st0 в mem, mem ложим в eax )

5. Еще сопроцессор ( mem dword ?)
Код:
finit
fldpi
fcos
fchs
fist mem
mov eax,mem
То есть ложим в st0 число пи, находим косинус пи (-1), меняем знак, сохраняем значение

6. А теперь больше тригонометрии
Код:
finit
fldz
fcos
fist mem
mov eax,mem
Ищем косинус от нуля))))) А это 1)))

7. А еще можно так
Код:
 sub eax,eax
 sub al,-1
это 4 байта.

8. Самый мой любимый способ
Код:
sub eax,eax
bfs eax,0
В нулевой бит ложим 1=)

9.
Код:
 lea eax,[1]
Длинно, но все же....

10. Разновидность 5 метода, но беру модуль
Код:
finit
fldpi
fcos
fabs
fist mem
mov eax,mem
11.
Код:
sub eax,eax
   dec eax
   imul eax,eax
Ну это всем наверное ясно -1*(-1)=1

12. Этот способ я тоже люблю.
Делим двоичный логарифм 10 сам на себя.Аналогичный способ с любым др. числом (например с натуральным логарифмом 2 -
оба способа рассматриваются)
Код:
finit
fld2t
fld2t
fdiv st0,st1
fist mem
mov eax,mem
и соответственно

Код:
finit
fldln2
fldln2
fdiv st0,st1
fist mem
mov eax,mem
а можно еще с числом пи и десятичным логарифмом 2
Код:
finit
fldpi
fldpi
fdiv st0,st1
fist mem
mov eax,mem
и

Код:
finit
fldlg2
fldlg2
fdiv st0,st1
fist mem
mov eax,mem
13. Тригонометрия. Что-то меня тригонометрия в последнее время вдохновляет. Вариация на тему основного тригонометрического
тождества.
Код:
finit
fldln2 ; натуральный логарифм 2
fcos ; получаем косинус
fldln2
fcos 
fmul st,st(1) ; (cos(ln2))^2
fldln2 
fsin ; теперь синус 
fldln2
fsin
fmul st(1),st ; (sin(ln2))^2
fincstp 
fadd st,st(1) ; st0+st1=1 по основному тригонометрическому тождеству 
fist mem
14. Красивый способ
Код:
stc ; установка флага переноса в 1
sbb eax,eax ; вычитание с заемом
neg eax ; -(-1)=1
15. В еax будет true, то есть 1
Код:
sub eax,eax
cmp eax,eax
sete al
16. Еще извратный способ
Код:
sub eax,eax
sub ecx,ecx
dec eax
mov cx,1fh
m1:
btc eax,ecx ; фишка в этой команде. инвертируем все биты, кроме последнего, тогда в самом регистре будет 1
loop m1
17.А еще можно так
Код:
sub eax,eax
stc ; установка флага переноса в 1
adc eax,eax ; сложнение с учетом флага переноса CF
18.Простенько, но со вкусом
Код:
sub eax,eax
or eax,1
19. Почти тоже самое
Код:
 
xor eax,eax
xor eax,1
20.Обалденный способ. 4 bsr над -1 и получаем 1)
Код:
   sub eax,eax
   dec eax
   bsr eax,eax
   bsr eax,eax
   bsr eax,eax
   bsr eax,eax
21. Тоже вариант
Код:
 sub eax,eax
 dec eax
 shr eax,1fh ; логический сдвиг вправо
22. Скушный метод, но результат тот же
Код:
xor eax,eax
dec eax
and eax,1
23. Довольно неинтересно.. но все же
Код:
xor eax,eax
dec eax
neg eax
Пока на этом все......

Последний раз редактировалось 0x0c0de; 03.10.2007 в 20:06..
 
Ответить с цитированием

  #2  
Старый 03.10.2007, 18:39
Ni0x
Постоянный
Регистрация: 27.08.2006
Сообщений: 367
Провел на форуме:
2009677

Репутация: 472
По умолчанию

Это все конечно круто, только зачем мне куча каких-то извращенных способов, если обычно используются 3-4 способа из списка? Причем по размеру они выигравают все остальные. Честно говоря, похоже на детское хвастовство, теперь сделай 23 способа как получить -1 в регистре. Без обид, но лучше вкладывать свой потенциал во что-то более серьезное.
 
Ответить с цитированием

  #3  
Старый 03.10.2007, 18:45
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

Репутация: 1564
Отправить сообщение для 0x0c0de с помощью ICQ
По умолчанию

Ну цель вообще другая была... А именно
Цитата:
Хорошая разминка для мозгов
Выйти за рамки стандартных команд так сказать. Я таким образом после дня напряженной учебы расслабляюсь

Цитата:
теперь сделай 23 способа как получить -1 в регистре
думаю их больше... тоже мысль.

ЗЫ Ясное дело, что лучше всего

Код:
 
sub eax,eax
inc eax
это всего 3 байта. Но юзают-то в основном mov eax,1
а это 5 байт=\\\\ Так что материал полезен для общего развития)

Последний раз редактировалось 0x0c0de; 03.10.2007 в 18:50..
 
Ответить с цитированием

  #4  
Старый 04.10.2007, 10:43
Xserg
Участник форума
Регистрация: 09.12.2006
Сообщений: 135
Провел на форуме:
426226

Репутация: 726
По умолчанию

Цитата:
Сообщение от 0x0c0de  
Пока на этом все......
+7 до 30

тоже 3 байта (константа до 255 для W32)
Код:
push 1
pop eax
с использованием API, которая обязательно возвратит 0
Код:
invoke IsWindow,-1
inc eax
; неудобный метод
Код:
push 1
push esp
pop esi
lodsd
pop esi
способ с исчезновением стека
Код:
stc ;<- 1
pushfd
xchg esi,esp
lodsd 
xchg esi,esp
and eax,1
мешает отладке
Код:
  call @1
    dd 1
@1: pop eax    
mov eax,[eax]
всего 11 байт запутанное зануление EAX
Код:
movzx ebx,ax
xchg ebx,eax
bswap eax
movzx ebx,ax
xchg ebx,eax
inc eax
полное извращение, но прикольно
Код:
   call @2
@2: pop esi
    push esi
    std
    lodsb
    sub [esp],esi
    cld
    pop eax
 
Ответить с цитированием

  #5  
Старый 16.11.2007, 21:29
dmnt
Познающий
Регистрация: 06.06.2007
Сообщений: 99
Провел на форуме:
559723

Репутация: 94
Отправить сообщение для dmnt с помощью ICQ
По умолчанию

вы таки шеллкодесов не писали
тут есть таки разница что использовать
 
Ответить с цитированием

  #6  
Старый 16.11.2007, 22:01
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

Цитата:
это всего 3 байта. Но юзают-то в основном mov eax,1
а это 5 байт=\\\\
Так он понятнее. Понятность кода намного важнее размера и скорости ) Есть конечно пара исключений, но это редкость.
 
Ответить с цитированием

  #7  
Старый 16.11.2007, 22:26
Piflit
Banned
Регистрация: 11.08.2006
Сообщений: 1,522
Провел на форуме:
5128756

Репутация: 2032


Отправить сообщение для Piflit с помощью ICQ
По умолчанию

Цитата:
Сообщение от nerezus  
Понятность кода намного важнее размера и скорости )
-1. для понятности существуют комментарии
 
Ответить с цитированием

  #8  
Старый 16.11.2007, 23:15
Hellsp@wn
Постоянный
Регистрация: 29.04.2007
Сообщений: 496
Провел на форуме:
2715445

Репутация: 588
По умолчанию

ещё так... тока мсысл всего этого? =) нету...

Xor eax,eax
Mov Al,1
 
Ответить с цитированием

  #9  
Старый 16.11.2007, 23:15
Forcer
Постоянный
Регистрация: 12.04.2007
Сообщений: 413
Провел на форуме:
3578578

Репутация: 275
Отправить сообщение для Forcer с помощью ICQ
По умолчанию

А я наоборот, полностью согласен с nerezus. Скорость, быстродействие - зависит от скила кодера в данный момент времени. А вот понятность кода, возможность его модернизации - это, так сказать, на все времена! Но это отнюдь не означает, что надо писать медленный и алгоритмически неправильный код в ушерб понятности. надо знать меру : ). По теме: асм не знаю, заметил лишь одно: не "ложим", а "кладем" - рус.яз. рулит : )
 
Ответить с цитированием

  #10  
Старый 16.11.2007, 23:27
0x0c0de
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
Провел на форуме:
4226446

Репутация: 1564
Отправить сообщение для 0x0c0de с помощью ICQ
По умолчанию

Клево. "Кладем"... Важное замечание такое)))))))))
В чем смысл? Я уже писала в чем смысл.... в далеком октябре. Читаем пост номер 1 вторая строка второе предложение. Читаем пост номер три. ЦЕЛИКОМ.

Цитата:
ещё так... тока мсысл всего этого? =) нету...

Xor eax,eax
Mov Al,1
нууууууу))))))) ну ладно... пусть будет. 31-й.
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить доступ админа Ipb2.2.2 bobobo Форумы 6 18.05.2007 18:25
Пробить номер телефона, проверить судимость, получить информацию о прописке Vasilii Разное - Покупка, продажа, обмен 8 26.11.2006 01:57
В Os X легко найти уязвимости, позволяющие получить полный контроль над операционной dinar_007 Мировые новости 1 12.08.2006 01:07
Получить название подключения EST a1ien С/С++, C#, Delphi, .NET, Asm 3 27.07.2006 20:32



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ