Написание кода, меняя местами команды которого все равно приводят к одному и тому же результату

Тема в разделе "WASM.ASSEMBLER", создана пользователем EvilsInterrupt, 24 июн 2006.

  1. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Вот написал код, если менять местами эти 3 строчки, то результат не меняется:
    Код (Text):
    1.     xor eax,dword[esp+0x4]  ; 33 24 04
    2.     xor eax,dword[esp+0x8]  ; 33 24 08
    3.     xor eax,dword[esp+0xc]  ; 33 24 0C


    Может кто больше напишет желательно строчек на 8, но хотя бы на 5!



    А меня можно 3й байта каждой команды, т.е. простота смены последовательности команд

    ЗЫ:

    куча подобных xor`ов не предлагать, не оригинально
     
  2. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    можешь заменть xor на or или and и написать или написать любую подобную последовательно с or или and где операнд приемник будет один и тот же. Стоит ли говорить что тоже будет и при add, sub, mul и любых других коммутативных операторах :)



    например
    Код (Text):
    1.  
    2.  sub eax,ecx
    3.  add eax,edx
    4.  add eax,ebx
    5.  sub eax,esp
    6.  
     
  3. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    The Svin

    >и при add, sub, mul и любых других коммутативных операторах



    А разве sub коммутативна?
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    The Svin

    >и при add, sub, mul и любых других коммутативных операторах



    А разве sub коммутативна?



    По твоему коду:
    Код (Text):
    1.  sub eax,ecx
    2.  add eax,edx
    3.  add eax,ebx
    4.  sub eax,esp


    давай заменим на:
    Код (Text):
    1.  sub eax,ecx
    2.  add eax,ebx
    3.  add eax,edx
    4.  sub eax,esp


    Результат будет тот же? ;)
     
  5. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Да тот же.

    Sub конечна не комутативна, но когда операнд первый не меняется мы можем рассматиривать sub как прибавление негативного значения.

    т.е. например к eax:

    eax + ebx + edx - esp - ecx =

    eax + edx - esp + ebx - ecx =

    ... вобщем всего если положение eax не менять !4(24) вариантов перестановок следующих 4х операндов
     
  6. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    The Svin

    долго думал, но пока еще не придумал как это xor можно заменить командами and или or. Может ты напутал чего или мне просто хочется спать :)))



    Единственное что пришло в голову, так на примере:



    0xC8 xor 0x43 = 0x8B



    На:



    0xC8 or 0x43 = 0xCB

    0xC8 and 0x43 = 0x40

    0xCB - 0x40 = 0x8B



    На правильно ли это?

    И это ли ты имел ввиду?
     
  7. Ultrin Faern

    Ultrin Faern New Member

    Публикаций:
    0
    Регистрация:
    25 июн 2006
    Сообщения:
    170
    А для чего это нужно?



    А как насчет между нужными командами нагенерить кучу мусорных команд, которые не будут затрагивать нужные регистры. И меняй себе мусор как угодно ...

    (Такой вариант вообще-то даст маску поиска)
     
  8. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia


    Нет, просто все слова "xor" в своём коде с ним замени на or, или все их замени на and :)
     
  9. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    The Svin

    ;)

    :-D