![]() |
23 способа получить в регистре единицу.
23 способа получить в регистре единицу.
От самых простых до самых извратных. Хорошая разминка для мозгов. 1. непохек Код:
2. Код:
sub eax,eax /xor eax,eax (по отдельности не рассматриваю)3. Код:
imul eax,04. Сопроцессор, но тут нужна дополнительная переменная. mem dword ? Код:
finitСначала мы инициализируем сопроцессор (finit), потом загружаем в st0 1, потом отправляем содержимое st0 в mem, mem ложим в eax ) 5. Еще сопроцессор ( mem dword ?) Код:
finit6. А теперь больше тригонометрии Код:
finit7. А еще можно так Код:
sub eax,eax8. Самый мой любимый способ Код:
sub eax,eax9. Код:
lea eax,[1]10. Разновидность 5 метода, но беру модуль Код:
finitКод:
sub eax,eax12. Этот способ я тоже люблю. Делим двоичный логарифм 10 сам на себя.Аналогичный способ с любым др. числом (например с натуральным логарифмом 2 - оба способа рассматриваются) Код:
finitКод:
finitКод:
finitКод:
finitтождества. Код:
finitКод:
stc ; установка флага переноса в 1Код:
sub eax,eaxКод:
sub eax,eaxКод:
sub eax,eaxКод:
sub eax,eaxКод:
Код:
sub eax,eaxКод:
sub eax,eaxКод:
xor eax,eaxКод:
xor eax,eax |
Это все конечно круто, только зачем мне куча каких-то извращенных способов, если обычно используются 3-4 способа из списка? Причем по размеру они выигравают все остальные. Честно говоря, похоже на детское хвастовство, теперь сделай 23 способа как получить -1 в регистре. Без обид, но лучше вкладывать свой потенциал во что-то более серьезное.
|
Ну цель вообще другая была... А именно
Цитата:
Цитата:
ЗЫ Ясное дело, что лучше всего Код:
а это 5 байт=\\\\ Так что материал полезен для общего развития) |
Цитата:
тоже 3 байта (константа до 255 для W32) Код:
push 1Код:
invoke IsWindow,-1Код:
push 1Код:
stc ;<- 1Код:
call @1Код:
movzx ebx,axКод:
call @2 |
вы таки шеллкодесов не писали
тут есть таки разница что использовать |
Цитата:
|
Цитата:
|
ещё так... тока мсысл всего этого? =) нету...
Xor eax,eax Mov Al,1 |
А я наоборот, полностью согласен с nerezus. Скорость, быстродействие - зависит от скила кодера в данный момент времени. А вот понятность кода, возможность его модернизации - это, так сказать, на все времена! Но это отнюдь не означает, что надо писать медленный и алгоритмически неправильный код в ушерб понятности. надо знать меру : ). По теме: асм не знаю, заметил лишь одно: не "ложим", а "кладем" - рус.яз. рулит : )
|
Клево. "Кладем"... Важное замечание такое)))))))))
В чем смысл? Я уже писала в чем смысл.... в далеком октябре. Читаем пост номер 1 вторая строка второе предложение. Читаем пост номер три. ЦЕЛИКОМ. Цитата:
|
Мой код эффективнее :D :D :D
Код:
.386 |
Цитата:
|
а зачем писать fdiv st0,st1 когда проще fdivp?
|
>> а зачем писать fdiv st0,st1 когда проще fdivp?
а вы предлагайте новые способы, не стесняйтесь. Следуйте примеру Xserg) Здесь я и не думала писать, что проще. Просто рассмотрела пару десятков извратных способов. mov eax,1 - это было весьма скушно. Приятно, что тема не умерла и кому-то это еще интересно. |
либо ослеп .... либо туплю!
не увидел банального ... mov ax,256 xchg ah,al ... |
xor ecx,ecx
jecxz m @m: inc ecx :) вот только что еще пришло в голову с loop ..... @m: loop m ..... суть в том,что если надо обнулить ecx,то как раз будет цикл пока в ecx не будет 0,после чего можно inc ecx по желанию :) |
хммммммм..... лупы пошли 8)))
mov ecx,3 mov eax,7 a: sub ax,cx loop a |
я теперь понял еще одно отличие кодера с античата (хэкера) от программиста: программист не будет искать еще один способ получить в регистре 1, и тем более через жопу, тогда как кодер с античата следуя манифесту хэкера задействует все самые бесполезные инструкции. что ж вы еще системные вызовы не подключили, по-моему супер это записать 1 на диск и считать ее же в регистр. 0x0c0de бездельник и тунеядец! эхх...
|
Еще боюсь,что можно shr,shl
Цитата:
shr eax,33 - 1 байт 8 бит - макс значение в 32 битном регистре(DWORD = 4 байтам или 32 бита),следовательно сдвинув регистр на 33 мы получим 0 :) |
Ещё можно сделать так. Запустить netcat на удаленном unix-хосте взломаном, приконектится со своего компа туда telnet'ом и послать единицу, а там руткит перехватит её в траффике, преобразует в число и засунет в регистр. Заодно потом в консоли можно на ascii-порнуху подрочить, за заслуги, как все настоящии хакеры по манифесту (вместо стандарта).
|
обфусикатор для асма в студию!
|
По идее, математика не ограничивает получение единички в регистре 23 способами (или скока там уже). Способов десятки, сотни и тыщи :) Другое дело их реализация на асме =) А вообще, мой любимый способ, хоть он и заезженный до дыр
Код:
xorl %eax,%eax |
23 способа ;)
Нужно взять на вооружение. Для полиморфных технологий ))) |
Никто не задумывался что таких способов в принципе бесконечно много? чем вам не нравится, скажем:
xor edx,edx lea eax,[edx+1] xor eax,eax lea eax,[eax-1] neg eax и ещё 10 миллионов способов используя всевозможные решистры, адреса памяти... Если на то пошло то и SEH можно раскрутить, зная что второе DWORD последней структуры -1 и взять от него neg. |
Жёсткий способ под дос:
Код:
.MODEL TINY |
| Время: 00:48 |