Загвоздка: 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 байт
Проблему решил. Дело в том что я узанавал размер и вычитал из него 16, после ставил указатель на эту величину от Конца! А надо на эту величину от начала!
Доброго здравия и безглючного кода. 1) У меня загвоздка в проекте который я прикрепил есть глюк в коде(0x0e5ah) выскакивает ошибка cf=1,al=06h, т.е. инвалидный дискриптор! Она у меня проявилась в следующей ситуации: создал 1.txt с следующим содержанием: "Pentium",т.е. 7 символов, получил 1.crp, 1.txt переименовал в 1_or.txt запускаю и не фига! См. описание ошибки выше 2) Также есть следующий баг, при попыке расшифровывания зашифрованного crypt.asm получается дурь с 2мя послед- ними байтами, почему тоже не уловлю смысла. Просьба помочь разобраться с 2 мя багами, и порекомен- довать пути их исправления. _2008298595__cryptor.zip
EvilsInterrupt mov bx,descryptor1 push bx xor cx,cx xor dx,dx mov al,2 Не используй 16-и битные регистры. Уже очень давно надо было отказаться от них, т.к. скорость их оставляет желать лучшего.
Avalonec Гыг... не только скорость!! "mov AX,some_shit" и "mov EAX,some_shit" транслируются в один и тот же код <0B8h shit_someh> только в дескрипторе сегмента кода под win32 должен быть установлен бит D=1 (хм... вроде не напутал) и по умолчанию подразумевается 32 битовый регистръ, а когда юзаешь в коде AX, транслятор перед опкодом должен вставить префикс замены размера операнда 066h, т.е. используя 16 битовые реги мы увеличиваем каждую комманду на 1 байт.... если я ничего не путаю....
Avalonec > Не используй 16-и битные регистры Inked Wedge > Гыг... не только скорость!! ... увеличиваем каждую комманду на 1 байт Прежде чем давать рекомендации ознакомьтесь с исходным текстом и уясните, наконец, что он является dos-приложением, использующим 16-тибитные сегменты (т.е. префикса размера операнда не будет) и что параметры в диспетчер функций dos передают в 16-тибитных регистрах.
Кому не влом глянете на аттач, производит ли он информацию для крипто аналитика по мимо, одинаковых 64 битных блоков! _1275045186__cryptor.zip
q_q Хм... тогда 32 разряда будут увеличивать на байт... префиск перед этими коммандами ставится будет... P.S. В исходнике ничего не указывает однозначно на дос платформу
Inked Wedge ничего не указывает Шутишь? Или неудачная попытка оправдаться? Код (Text): ... org 100h ... int 20h ... ; прочитать клаву на "1" или "2" ; в случае двойки режим decrypt mov ah,8 int 21h ...
EvilsInterrupt как в досе серийник винта прочитать <ol type=1><li>Опять про серийный номер винта;<li>Программа чтения серийного номера винчестера(длиной 256 слов). by Chingachguk правда под win, но информация к размышлению есть;<li>imho не хорошая практика задавать вопрос который не имеет отношение к исходной теме.</ol>
Странно...? Это самая лучшая учебная система! А вот теперь по серьезней решил кодить, плюс к тому можешь ли ты так просто повторить в фокус в аттаче в винде? _1054942634__fokus.com
EvilsInterrupt В чем фокус? Какие проблемы с поxor'иванием и перемещением собственного кода в win-приложении? Код (Text): cs:0100 83C606 add si,0006 cs:0103 FFE6 jmp si cs:0105 B9 cs:0106 BE1401 mov si,0114 cs:0109 AD lodsw cs:010A 91 xchg cx,ax cs:010B 56 push si cs:010C 803466 xor byte ptr [si],66 cs:010F 46 inc si cs:0110 E2FA loop 010C cs:0112 FFE6 jmp si cs:0114 0001 dw 100h ; это код после поксоривания cs:0116 B409 mov ah,09 cs:0118 BA0C01 mov dx,010C cs:011B CD21 int 21 cs:011D 31C0 xor ax,ax cs:011F CD16 int 16 cs:0121 C3 ret ; этот адрес превратиться в 010Ch после работы кода CS:0216h cs:0122 db 'Hello,IDA PRO! $' cs:0216 E80000 call 0219 cs:0219 59 pop cx cs:021A 5E pop si cs:021B 2BCE sub cx,si cs:021D BF0001 mov di,0100 cs:0220 57 push di cs:0221 F3A4 rep movsb cs:0223 C3 ret
EvilsInterrupt Ничего, бывает... Существуют же win32 полиморфные вири... Меня тоже всякие недоумки, решившие писать книжки о protected mode и windows запутывали во многом... до сих пор не могу до конца разобраться в сосуществовании pagination и segmentation А насчет ДОСа в образовательных целях - эт ты правъ... забыл просто - давно это было я вообще асм начиал учить в досовском DEBUG'е...
Взял володину статью про упаковщики и начал колупать мучавший меня вопрос: для этого взял calc.exe(w2k sp4) через dumppe увидел, что ImageBase - 01000000, Address of Entry Point - 00012420. По идее если сложить будет VA точки входа в прогу по- лучилось 55 8b, если уж сам володя так же написал, зна- чит велика вероятность, что я не ошибся. У меня непонимание вот в чем, когда мы на асме написа- ли код, то ассемблер сделал его объект,линковщик дол- жен сделать нужные связи, если я правильно понял доки то именно он проставит все va,rva,и AdressOfEntryPoint в том числе. 1) мне интересен этот момент как он вычисляет адресс точки входа в прогу? 2) Плюс в статье сказано, что реальный адрес загрузки не всегда должен совпадать с указаным ImageBase! в каких случаях, он может не совпа- дать с этим ImageBase, и правильно ли я понял, что это значение все равно учитывается при поправках? если да, то как?