![]() |
|
![]() ![]() ![]() |
|
Lordolein |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2007 Репутация: нет Всего: нет |
Если не сравнивать имена создаваемых файлов с эталоном то все работает Помогите найти ошибку , спасибо . |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
||||
|
||||
Lordolein |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2007 Репутация: нет Всего: нет |
Вот полностью код
|
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
|
|||
|
||||
Lordolein |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2007 Репутация: нет Всего: нет |
Спасибо. Если перебирать по буквам то работает. Но как же тогда теория - по ней должно работать - я код проверки строк тоже взял из книжки и кажись все там понятно или в книжке ошибка , ( 90% что я чего не понял и хотелось бы знать что) ?
|
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
у тебя была процедура сравнения строк с учетом регистра букв(т.е. C:\In.txt не равно C:\IN.TXT). я переделал, чтобы зависимости от регистра не было. что непонятно?
|
|||
|
||||
Lordolein |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2007 Репутация: нет Всего: нет |
Теперь начинаю понимать,посмотрел АSCII─TABLE...., ещё нашел в книжке вместо
and al, not 20h ; такое sub al, 'a'-'A' - первое , я так понимаю быстрее выполняется? Да , если прописать имя файла с путем - то не работает т.е. File_name_in db 'C:\IN.TXT',0 - не срабатывает а File_name_in db 'IN.TXT',0 - уже хорошо . Путь надо обрабатывать иным способом? DUMB, спасибо !! |
|||
|
||||
dumb |
|
||||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
|
||||||
|
|||||||
Lordolein |
|
||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2007 Репутация: нет Всего: нет |
Спасибо , все работает, не совсем понимаю назначение некоторых строк
и еще подскажите как правильно считать из него и записать в отловленный обработчиком файл свои данные до его закрытия главной программой, правильно ли будет получить Handle по наступившему событию перехвата, или надо чтоб отработал стандарный? Делаю так (и не работает):
Еще раз БОЛЬШОЕ СПАСИБО! |
||||
|
|||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
ah в нашей функции играет роль флага идентичности строк, который мы в конце переносим в al, потому как булевы значения принято возвращать в al. mov ah,0 - на случай, если функция "расширения" имени отработает с ошибкой(jc @@ret). ведь если функция вернет ошибку, то мы не можем сравнивать то, что она вернула, с нашей строкой. поэтому мы выходим с 0(типа строки не равны). xor ax,ax - это по сути обнуление регистра ax. т.е. аналог mov ax,0 - просто раньше(на древнем железе) такой способ обнуления работал быстрее, да и код короче(если не учитывать mov в 8-битные регистры). inc ah = mov ah,1 - т.е. просто устанавливаем флаг идентичности строк. уфф... ![]()
что-то я не уловил, какие это ты данные собрался читать из файла, который программа только-только пытается создать?! записать-то можно, но многие программы могут этого "не понять", так как их логика предполагает, что файл будет пуст после создания - ошибки будут стопудово. ты б лучше описал саму цель - что ты хочешь сделать, потому как очень похоже на то, что ты идешь не по тому пути... |
|||
|
||||
Lordolein |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2007 Репутация: нет Всего: нет |
к вирусописательству совсем не тянет ![]() ![]() Задача формулируется так : резидентная программа отслеживает создание броузером (Arachne) файла cookies и состояние ком-порта. При создании cookies , с него надо считать данные по условию и отправить в компорт, т.е. ищем "Put=", после знака равенства пишем все в ком порт пока не встретится символ ";" , дальше любая информация с компорта дописывается в тот же cookies для переменной Put. Немного почитал книжки - все сначала кажется просто и легко реализуемо(особенно если встретил похожие примеры для изучения)- а на практике выходит наоборот. Вот как работать в дебуггере с резидентом ? очень признателен за ответы. |
|||
|
||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
об это речь и не шла...
![]() тогда схема должна быть примерно такая: 1. отловить создание, вызвать старый обработчик, полученный оттуда хэндл сохранить 2. отловить закрытие(это наиболее корректный путь), сравнить переданный хэндл со своим сохраненным, если совпадает - редактировать файл. все, что делалось выше - детский лепет по сравнению с работой с ком-портом. DeGlucker тебе в помощь. запускаешь dg.com, потом свой резидент, потом... ээ... (посмотрел доку) жмешь Pause - всплывает деглюкер, в окне кода жмешь Ctrl-I, вводишь номер прерывания и он тебя перемещает аккурат на обработчик. кстати, весьма странная задачка у тебя. оно для чего такое? ![]() |
|||
|
||||
Lordolein |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2007 Репутация: нет Всего: нет |
спасибо , уже пробую [quote] жмешь Ctrl-I, вводишь номер прерывания [/quote выбираю прырывание 21h, по клавише F8 доходжу до сравнения
дальше правлю АH на 3С и в DS:DX записываю значения для файла С:\IN.TXT (эти адреса беру из таблички внизу) потом чтоб не заходить в каждую процедуру (ну прерывание по 3Ch уже работает нормально, а хочу я только посмотреть Handle1) я перемещаю курсор после команды, где вызывается оригинальный обработчик и жму F4 - деглюкер выходит в ДОС, а когда его активизирую по Pause - то курсор уже улетел кудато,
что я не так делаю ?
это потому что фирма не богатая и меня интересует ассемблер ![]() |
||||||||
|
|||||||||
dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 7 Всего: 158 |
эм. как это по F8? после того, как ты сделал Ctrl-I, 21(можно без h), выбираешь нужное тебе место(просто курсором) и ставишь бряк(брейк-поинт/breakpoint) путем вдавливания кнопки F2 - появится красная метка. потом "отпускаешь" отладчик - F9. вернувшись в ДОС, обычно надо "передернуть" NumLock и один раз нажать какую-либо кнопку, чтобы "отморозить" клаву.
а когда выполнение дойдет до места бряка, отладчик сам всплывет. потом, можно ставить бряк просто на прерывание - Alt-I. например, чтобы поставить бряк на 21/3c надо: Alt-I, 21, 3cff. вобщем, почитай хелп dg_rus.txt ![]() |
|||
|
||||
Lordolein |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 24.7.2007 Репутация: нет Всего: нет |
DUMB спасибо
все потихоньку получается, но сейчас немного другим занят -перевожу загрузку ДОСовских машин с Новела на Линукс(Новел тоже на 486, а винтов таких уже нет)- в связи с этим сразу вопрос -в Линуксе легче решить мою задачу (разумеется на 486 будет возможность грузить (надеюсь) Linux и ДОС) а то я замучился с этими прерываниями и зависанием компа под ДОСом? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Asm для начинающих" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Asm для начинающих | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |