Загводка

Тема в разделе "WASM.ASSEMBLER", создана пользователем EvilsInterrupt, 10 сен 2004.

  1. EvilsInterrupt

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

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

    mov bx,descryptor1

    push bx

    xor cx,cx

    xor dx,dx

    mov al,2

    call fileseek ; ставим наконец файла

    pop bx

    push bx

    mov cx,dx

    mov dx,ax

    sub dx,16d

    mov al,2

    call fileseek ; поставим на 16 от конца

    Открыл файл размером в 16 байт, и по идее после конечной

    функции указатель должен установиться Size-16, т.е. на ну-

    левом файловом смещении, вместо этого вижу dx=0000,ax=0010

    хотя жду нули.

    почему он не хочется устанавливаться в нужное файловое сме-

    чение.



    Дело в том что в файле, который буду открывать в конце 16

    байт очень важны для меня поэтому хочу обобщить и сделать

    как для 1230h размером, так и для 10h одну функцию прочте-

    ния этих 16 байт
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    xor cx,cx

    xor dx,dx




    Зачем?



    pop bx

    push bx




    Зачем?
     
  3. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Чтобы сначала узнать какой размер файла а уж потом делать смещение
     
  4. EvilsInterrupt

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

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

    Дело в том что я узанавал размер и вычитал из него 16,

    после ставил указатель на эту величину от Конца!



    А надо на эту величину от начала!
     
  5. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Доброго здравия и безглючного кода.



    1)

    У меня загвоздка в проекте который я прикрепил есть

    глюк в коде(0x0e5ah) выскакивает ошибка cf=1,al=06h,

    т.е. инвалидный дискриптор! Она у меня проявилась в

    следующей ситуации:



    создал 1.txt с следующим содержанием: "Pentium",т.е.

    7 символов, получил 1.crp, 1.txt переименовал в 1_or.txt

    запускаю и не фига! См. описание ошибки выше



    2)

    Также есть следующий баг, при попыке расшифровывания

    зашифрованного crypt.asm получается дурь с 2мя послед-

    ними байтами, почему тоже не уловлю смысла.



    Просьба помочь разобраться с 2 мя багами, и порекомен-

    довать пути их исправления.

    [​IMG] _2008298595__cryptor.zip
     
  6. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Разобрался просто прежде чем писать в файл забыл его создать :)
     
  7. Avalonec

    Avalonec New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    111
    Адрес:
    Тула
    EvilsInterrupt



    mov bx,descryptor1

    push bx

    xor cx,cx

    xor dx,dx

    mov al,2




    Не используй 16-и битные регистры. Уже очень давно надо было отказаться от них, т.к. скорость их оставляет желать лучшего.
     
  8. Inked Wedge

    Inked Wedge New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2004
    Сообщения:
    33
    Адрес:
    Ukraine
    Avalonec

    Гыг... не только скорость!!



    "mov AX,some_shit" и "mov EAX,some_shit" транслируются в один и тот же код <0B8h shit_someh> только в дескрипторе сегмента кода под win32 должен быть установлен бит D=1 (хм... вроде не напутал) и по умолчанию подразумевается 32 битовый регистръ, а когда юзаешь в коде AX, транслятор перед опкодом должен вставить префикс замены размера операнда 066h, т.е. используя 16 битовые реги мы увеличиваем каждую комманду на 1 байт.... если я ничего не путаю....
     
  9. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Avalonec > Не используй 16-и битные регистры

    Inked Wedge > Гыг... не только скорость!! ... увеличиваем каждую комманду на 1 байт

    Прежде чем давать рекомендации ознакомьтесь с исходным текстом и уясните, наконец, что он является dos-приложением, использующим 16-тибитные сегменты (т.е. префикса размера операнда не будет) и что параметры в диспетчер функций dos передают в 16-тибитных регистрах.
     
  10. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Кому не влом глянете на аттач, производит ли он информацию для крипто аналитика по мимо, одинаковых 64 битных блоков!

    [​IMG] _1275045186__cryptor.zip
     
  11. Inked Wedge

    Inked Wedge New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2004
    Сообщения:
    33
    Адрес:
    Ukraine
    q_q

    Хм... тогда 32 разряда будут увеличивать на байт... префиск перед этими коммандами ставится будет...



    P.S. В исходнике ничего не указывает однозначно на дос платформу :)
     
  12. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    Inked Wedge

    ничего не указывает

    Шутишь? Или неудачная попытка оправдаться?
    Код (Text):
    1. ...
    2. org 100h
    3. ...
    4.     int 20h
    5. ...
    6. ; прочитать клаву на "1" или "2"
    7. ; в случае двойки режим decrypt
    8.     mov ah,8
    9.     int 21h
    10. ...
     
  13. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    ни кто не знает, как в досе серийник винта прочитать?
     
  14. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    EvilsInterrupt

    как в досе серийник винта прочитать

    <ol type=1><li>Опять про серийный номер винта;<li>Программа чтения серийного номера винчестера(длиной 256 слов). by Chingachguk правда под win, но информация к размышлению есть;<li>imho не хорошая практика задавать вопрос который не имеет отношение к исходной теме.</ol>
     
  15. Inked Wedge

    Inked Wedge New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2004
    Сообщения:
    33
    Адрес:
    Ukraine
    q_q

    Блин теперь понял.... я не туды смотрел. Странно, что под ДОС еще кто то пишет.......
     
  16. EvilsInterrupt

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

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

    Это самая лучшая учебная система!

    А вот теперь по серьезней решил кодить, плюс к тому можешь ли ты так просто повторить в фокус в аттаче в винде?

    [​IMG] _1054942634__fokus.com
     
  17. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    EvilsInterrupt

    В чем фокус?

    Какие проблемы с поxor'иванием и перемещением собственного кода в win-приложении?


    Код (Text):
    1. cs:0100 83C606         add    si,0006
    2. cs:0103 FFE6           jmp    si
    3. cs:0105 B9
    4. cs:0106 BE1401         mov    si,0114
    5. cs:0109 AD             lodsw
    6. cs:010A 91             xchg   cx,ax
    7. cs:010B 56             push   si
    8. cs:010C 803466         xor    byte ptr [si],66
    9. cs:010F 46             inc    si
    10. cs:0110 E2FA           loop   010C
    11. cs:0112 FFE6           jmp    si
    12.  
    13. cs:0114 0001           dw     100h
    14.  
    15. ; это код после поксоривания
    16. cs:0116 B409           mov    ah,09
    17. cs:0118 BA0C01         mov    dx,010C
    18. cs:011B CD21           int    21
    19. cs:011D 31C0           xor    ax,ax
    20. cs:011F CD16           int    16
    21. cs:0121 C3             ret
    22.  
    23. ; этот адрес превратиться в 010Ch после работы кода CS:0216h
    24. cs:0122                db     'Hello,IDA PRO! $'
    25.  
    26. cs:0216 E80000         call   0219
    27. cs:0219 59             pop    cx
    28. cs:021A 5E             pop    si
    29. cs:021B 2BCE           sub    cx,si
    30. cs:021D BF0001         mov    di,0100
    31. cs:0220 57             push   di
    32. cs:0221 F3A4           rep movsb
    33. cs:0223 C3             ret
     
  18. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    странно но я всегда считал что код в винде всегда выставлен по чтению!
     
  19. Inked Wedge

    Inked Wedge New Member

    Публикаций:
    0
    Регистрация:
    15 авг 2004
    Сообщения:
    33
    Адрес:
    Ukraine
    EvilsInterrupt

    Ничего, бывает... :) Существуют же win32 полиморфные вири...



    Меня тоже всякие недоумки, решившие писать книжки о protected mode и windows запутывали во многом... до сих пор не могу до конца разобраться в сосуществовании pagination и segmentation :)



    А насчет ДОСа в образовательных целях - эт ты правъ... забыл просто - давно это было :) я вообще асм начиал учить в досовском DEBUG'е...
     
  20. EvilsInterrupt

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

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    Взял володину статью про упаковщики и начал колупать

    мучавший меня вопрос:



    для этого взял calc.exe(w2k sp4) через dumppe увидел,

    что ImageBase - 01000000,

    Address of Entry Point - 00012420.

    По идее если сложить будет VA точки входа в прогу по-

    лучилось 55 8b, если уж сам володя так же написал, зна-

    чит велика вероятность, что я не ошибся.

    У меня непонимание вот в чем, когда мы на асме написа-

    ли код, то ассемблер сделал его объект,линковщик дол-

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

    то именно он проставит все va,rva,и AdressOfEntryPoint

    в том числе.

    1) мне интересен этот момент как он вычисляет

    адресс точки входа в прогу?

    2) Плюс в статье сказано, что

    реальный адрес загрузки не всегда должен совпадать с

    указаным ImageBase! в каких случаях, он может не совпа-

    дать с этим ImageBase, и правильно ли я понял, что это

    значение все равно учитывается при поправках? если да,

    то как?