Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

RusFAQ.ru: программирование на языке Assembler

Выпуск № 485
от 04.02.2003, 16:20

Администратор:
Имя: Калашников О.А.
URL: Информационный ресурс
ICQ: 68951340
Россия, Москва
О рассылке:
Задано вопросов: 2588
Отправлено ответов: 7792
Активность: 301.0 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

DiGiT[old]
Статус: Опытный
Общий рейтинг: 109.52
[Подробней >>]
Igoryk
Статус: Опытный
Общий рейтинг: 137.96
URL: IgorykSoft
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 145.56
[Подробней >>]
 
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.19
URL: Страничка обо мне и моих друзьях
Телефон: +7 902 168 02 65
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 151.58
URL: Программирование
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.13
[Подробней >>]
 
Eugene
Статус: Опытный
Общий рейтинг: 109.21
URL: мощный файловый архив
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 139.44
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 126.13
URL: моя рассылка по Protected Mode
[Подробней >>]


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

Вопрос № 2530. Доброе время суток , эксперты ! ******************************* Процесс А запускает процесс В. Какие... (ответов: 4)
Вопрос № 2531. Доброе время суток , эксперты ! ******************************* Ставлю хук и получаю его описатель(в... (ответов: 3)
Вопрос № 2532. Доброго времени суток Вам всем !!! Хотел бы спросить у Вас помощи по следующему вопросу: админ сети ... (ответов: 2)
Вопрос № 2533. Привет всем! Существует пара функций для работы со строками (см. приложеньице). Я пишу на си, а тут ... (ответов: 4)
Вопрос № 2534. Здравствуйте экперты, я уже задавал вопрос про boot сектор, но так и не понял как спомощью assembler... (ответов: 4)
Вопрос № 2535. Здрасте... Мама мия!!!!!!!!!! Мой вопрос № 2525 ... вот .. большая цифра .. да?? Ответили двое Ayl и... (ответов: 1)
Вопрос № 2536. Здравствуйте, уважаемые эксперты ! Все вопросы относятся к системе ДОС : 1.А не скинет-ли кто-... (ответов: 4)
Вопрос № 2537. Здравствуйте уважаемые эксперты. Написал boot сектор для дискеты 1.44 мб, который грузит в память фа... (ответов: 2)
Вопрос № 2538. Подскажите ссылку на хорошие Include-файлы для Tasm'а(под Windows) для режима IDEAL.... (ответов: 2)

Вопросов: 9, ответов: 26


 Вопрос № 2530

Доброе время суток , эксперты !
*******************************
Процесс А запускает процесс В.
Какие хуки лучше поставить,чтобы А
отлавливал завершение В и минимизацию
главного окна В.



Вопрос отправлен: 30.01.2003, 11:14
Отправитель: IceWINteR (brothers@atnet.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает DiGiT[old]

Приветствую Вас, IceWINteR!
hookid== WH_CBT, передаваемое значение HCBT_CREATEWND для реагирования на создание окна..., HCBT_DESTROYWND догадайся,
и HCBT_MINMAX. Правда это если твое приложение имеет окно, к тому же этот хук будет вызываться при создании всяких менюшек. Кстати не вздумай вставлять в этот хук вывод какого нить MesssageBox, иначе твоя система грохнется :)).

Ответ отправлен: 31.01.2003, 03:47
Отправитель: DiGiT[old]


Отвечает Igoryk

Добрый день, IceWINteR!
Завершение - WM_QUIT или WM_DESTROY
Минимизация - WM_RESIZE или WM_MINIMIZE

Ответ отправлен: 01.02.2003, 21:15
Отправитель: Igoryk


Отвечает masquer

Приветствую Вас, IceWINteR!
WH_MSGFILTER

Ответ отправлен: 30.01.2003, 11:59
Отправитель: masquer


Отвечает Gibbel

Доброе время суток, IceWINteR!
1. DWORD WaitForSingleObject(
HANDLE hHandle, // handle to object
DWORD dwMilliseconds // time-out interval
);
Первым параметром передаешь хэндл процесса и получаешь его состояние (завершен/незавершен)
2. Хуки на сообщения.

Ответ отправлен: 30.01.2003, 13:31
Отправитель: Gibbel


 Вопрос № 2531

Доброе время суток , эксперты !
*******************************
Ставлю хук и получаю его описатель(в обычном приложении).
Фильтрующая ф-ия находится в DLL.
Там она вызывает CallNextHookEx,
где 1-ый параметр описатель моего хука.
Что сделать чтобы в DLL был виден этот
описатель из моего приложения ?
DLL загружаю явно(LoadLibrary).



Вопрос отправлен: 30.01.2003, 11:50
Отправитель: IceWINteR (brothers@atnet.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает DiGiT[old]

Добрый день, IceWINteR!
В dll делаешь статическую переменную, и заводишь экспортируемую функцию типа SetHookDescriptor(....),
в которой и ставишь этот описатель этой переменной, вот и все...

Ответ отправлен: 31.01.2003, 03:41
Отправитель: DiGiT[old]


Отвечает masquer

Доброе время суток, IceWINteR!
Либо я вопрос не совсем понял, либо ты сам запутался, что значит "что сделать", объявить его переменной в shareable области данных, и все.
Или ты SetWindowsHookEx из приложения запускаешь? :)

Ответ отправлен: 30.01.2003, 12:14
Отправитель: masquer


Отвечает Gibbel

Добрый день, IceWINteR!
Храни его в сегменте данных, помеченом как shared.

Ответ отправлен: 30.01.2003, 13:32
Отправитель: Gibbel


 Вопрос № 2532

Доброго времени суток Вам всем !!!
Хотел бы спросить у Вас помощи по следующему вопросу:
админ сети закрыл доступ к некоторым сайтам из внутреней подсети, использующей прокси-сервер, т.е. стоит задача, написать внешний проксисервер, который будет установлен на сервере имеющем непосредственный доступ во внешнюю сеть и будет довать доступ (алтернативно) на закрытые основным прокси-серверов домены. Я хочу попробовать реализовать двумя способами первый-как DLL или COM-объект, второй (более сложный) в виде файла-драйвера (VxD). В чем нужна помощь - если можно поскажите возможно ли это (я думаю, что возможно), использовать ли WinSock или есть другие варианты.
Если у когото из вас есть подобный код, пришлите пожалуйста буду благодарен. Если можно, просто выскажите свои идею - думаю все будет полезно.
Заренее благодерен Всем Вам !!!
ПАРУС



Вопрос отправлен: 30.01.2003, 14:00
Отправитель: ПАРУС (bootloader@ukr.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает DiGiT[old]

Доброе время суток, ПАРУС!
:) Юный хакер млин. Если ты имеешь доступ к админскому компу нафига тогда тебе такая проблема как ходить мимо прокси. Ну разумеется интерфейс сокетов. Какой в задницу VxD издеваешься что ли. Делай dll запускаемую shellextension, её мона будет посмотреть тока выведя список всех dll експлорера, я так издевался над юзерами, написав такого ремот админа, правда тут выход не подгружать експлорер.
А кроме сокетов ничего ты и не сможешь сделать(если Q96015, "Streams Interface (TLI, XTI) Not Supported"), правда если у тя хороший админ, посмотря загрузку он скажет что юзеры как то ходят, и поэтому рубанет твою идею на корню :))

Ответ отправлен: 31.01.2003, 04:04
Отправитель: DiGiT[old]


Отвечает Bob Johnson

Приветствую Вас, ПАРУС!
Не заморачивайся - поставь (раз уж имеешь доступ к серверу) туда еще один прокси, только на другой порт. Если там ОС типа windows, то это будет процессом и службой (если NT). Потому что сам ты будешь писать его долго - нужно будет протокол прокси сервера изучать и все такое. Попробуй winproxy - сам его не ставил, но видел, что он очень маленький - значит простой и (вероятно) надежный.
Если же все-таки захочешь свой написать - то используй Windows Socket API. Vxd тут абсолютно незачем (хотя можно прокси и в виде драйвера сделать).


Ответ отправлен: 01.02.2003, 00:42
Отправитель: Bob Johnson


 Вопрос № 2533

Привет всем! Существует пара функций для работы со строками (см. приложеньице). Я пишу на си, а тут надо их в асм превратить, т.к. ясен пень быстрее работают. Так вот, с точки зрения опытного программмиста, это нормально написано?
Я имею в виду, что нет ли чего лишнего, или тупо написано, но самое главное - можно ли это еще покороче написать?
С уважением, Гомер.


Приложение:


Вопрос отправлен: 30.01.2003, 15:34
Отправитель: Homer (nushko@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Bob Johnson

Добрый день, Homer!
Я бы написал немного не так:
int __declspec(naked) __sdcall str_len (char *s)
{
__asm
{
mov eax, [s]
@@m1:
mov cl, [eax]
inc eax
test cl, cl
jnz @@m1
sub eax, [s]
dec eax
ret
}
}
void __declspec(naked) __sdcall str_cpy (char *dst, char* src)
{
__asm
{
mov edx, [src]
mov ecx, [dst]
@@m1:
mov al, [edx]
inc edx
mov [ecx], al
inc ecx
test al, al
jnz @@m1
ret
}
}


Ответ отправлен: 01.02.2003, 00:42
Отправитель: Bob Johnson


Отвечает DiGiT[old]

Приветствую Вас, Homer!
Я даже смотреть не стану, такого издевательства, библиотека в принципе гарантирует самую быструю реализацию, для среднего программера. Так что не следует умнить и писать свои функции.
Если ты пишешь на си, разумеется с точки зрения опытного программися(сиониста я имею ввиду) это все бред, так как си и асм конкретного процессора к переносимости отношения не имеют. Я не уверен, что твои функции быстрее стнадартных, просто возьми и проверь.

Ответ отправлен: 31.01.2003, 04:10
Отправитель: DiGiT[old]


Отвечает Ayl

Добрый день, Homer!
Нет, конечно. Во-первых, вместо индексирования лучше использовать указатель. Во-вторых, в асме есть специальные строковые команды. Лучше использовать их. В-третьих, даже если не трогать алгоритм, то твой код на асме не оптимален.
Я бы написал так (см.Приложение). А еще ты можешь посмотреть, как реализована функция strlen в системной библиотеке...

Приложение:

Ответ отправлен: 30.01.2003, 16:01
Отправитель: Ayl


Отвечает masquer

Приветствую Вас, Homer!
Ужасный код на ассеблере, постарайся так не писать. Во-первых есть строковые команды movsx, scasx, etc? вместо х - d, w, b в зависимости от обрабатываемого типа данных. На небольших строках достаточно быстро работают. С индексом на больших массивах на современных процессорах намного быстрее будет, но там своих ньюансов хватит - pairing, выравнивание, кеш и т.д.

Ответ отправлен: 30.01.2003, 16:11
Отправитель: masquer


 Вопрос № 2534

Здравствуйте экперты, я уже задавал вопрос про boot сектор, но так и не понял как спомощью assemblera запихать програмку написанную на assemblere в boot сектор?
Огромное спасибо за столь исчерпывающий ответ!



Вопрос отправлен: 30.01.2003, 17:04
Отправитель: Ova (ova777@inbox.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Eugene

Приветствую Вас, Ova!
Лови, только учти, что имя файла с MBR указывается в программе в данных и равно bootsect.mbr.

Приложение:

Ответ отправлен: 30.01.2003, 18:09
Отправитель: Eugene


Отвечает Ayl

Доброе время суток, Ova!
А что тебе еще надо? Адрес бут-сектора я тебе написал. Используй его в 3-ей функции 13-го прерывания - запись сектора:
AH = 3
AL = 1 (кол-во записываемых секторов)
CH = 0 (дорожка)
CL = 1 (сектор)
DL = код диска (0-3 - дискета, 80h-81h - жесткий диск)
DH = 0 (головка)
ES:BX = буфер, содержащий данные для записи (512 байт)

Ответ отправлен: 30.01.2003, 17:26
Отправитель: Ayl


Отвечает Maverick

Приветствую Вас, Ova!
Лови доки по бутам!


Ответ отправлен: 31.01.2003, 05:34
Отправитель: Maverick


Отвечает Igoryk

Приветствую Вас, Ova!
Объяснить-то я могу. У меня есть утилитка (собственного написания) которая помещает текст файла BOOT.COM из текущей директории в загрузчик дискеты - простейшая программа. Теперь нужно разобраться: а нужно ли помещать в Boot всю программу? И в загруз.сектор дискеты или диска, если дискеты, то подойдет моя утилитка, если же на винчестер, то кроме твоей программы вообще ничего запускаться не будет. Потому что бут-сектор используетя сугубо в системных целях и поставив свою программу сюда, ты затрешь всю информацию нужную для запуска ОС.

Ответ отправлен: 01.02.2003, 21:15
Отправитель: Igoryk


 Вопрос № 2535

Здрасте...
Мама мия!!!!!!!!!!
Мой вопрос № 2525 ... вот .. большая цифра .. да??
Ответили двое Ayl и masquer ......
Я ведь говорю, что удаление было просто для ПРИМЕРА...
Я так думал ... есть asm и delphi ... на delphi без всякого геморроя(то бишь быстро) можно сделать красивую форму ... там кнопки и т.д. ... а под asm можно работать с винтом/биосом(быстро), что(как я знаю) сделать на delphi никак ... для примера запись в отдельные кластера.... вот я и хотел совместить приятное с полезным .... вот
Дак как нить можно все же это делать?????????????????



Вопрос отправлен: 30.01.2003, 19:55
Отправитель: lamachok

[Следующий вопрос >>] [Список вопросов]

Отвечает Ayl

Здравствуйте, lamachok!
Так а что тебе не понравилось в моем ответе (про masquer не говорю). Я тебе написал, что из дельфей (которые создают приложение для винды) ты не можешь вызывать прерывания ДОС. Только функции API Windows. Ну не даст тебе винда напрямую к оборудованию обратиться! Мало ли что ты там захочешь поизменять. Так что либо вызывай API, либо пиши свой драйвер.
Либо пиши прогу для ДОС, но тогда тебе придется отказаться от формочек, кнопочек и т.д. Либо самому их рисовать. Либо использовать Turbo Vision.

Ответ отправлен: 31.01.2003, 14:14
Отправитель: Ayl


 Вопрос № 2536

Здравствуйте, уважаемые эксперты !
Все вопросы относятся к системе ДОС :
1.А не скинет-ли кто-нить мне описание заголовка ЕХЕ для ДОС плиз ?
Потому как в имеющейся лит-ре я такового не нашел...
2.Каким образом, кроме использования внешнего анинсталлера, можно выгрузить своего резидента?
Если требуется, рабочий код резидента и анинсталлера в приложении.
3.Можно ли запустить прогу, скомпилированную TP7 (EXE простой, не оверлей и т.п., но с модулями...) таким образом : скопировать ее в память (имеется в виду за 1-й Мб), найти точку входа и прыгнуть туда?
4.Как, имея адрес в памяти, прыгнуть туда, корректно завершив обработчик прерывания? Обработчик уже не нужен (т.е. не нужно продолжение его выполнения после запуска программы, в памяти он остается)... Ведь вроде нужно дать комманду iret...
Спасибо :)))
S/


Приложение:


Вопрос отправлен: 31.01.2003, 01:27
Отправитель: Sslash (assem@ukr.net)

[Следующий вопрос >>] [Список вопросов]

Отвечает DiGiT[old]

Здравствуйте, Sslash!
1. codenet.ru ; google.com.ru В поисковом окне введи описание заголовка Exe файла dos.
2. Ну смотри пишешь сам анинсталер в твоем приложении и запускаешь его с ключом что нить вроде killself :))
3. прыгай прыгай только как ты прыгнешь в досе на расстояние больше 1 метра, с ее адресацией :))). Нет :(
4. отгрузив из стека три слова, регистр флагов, адрес сегмента и смещение.

Ответ отправлен: 31.01.2003, 04:15
Отправитель: DiGiT[old]


Отвечает Igoryk

Доброе время суток, Sslash!
1. http://igoryksoft.narod.ru/docs/asm/formats.rar
2. Для выгрузки используется функция 49h.
3. Скорее всего можно. Есть такая команда (если надо могу скинуть описание) "Загрузить, но не запускать". Так вот она-то тебе и нужна: загружаешь таким способом программу в память и jmp на входящую точку. Вариант второй: использовать в ассемблере модель small. Считать программу за конец файла и jmp-нуть сюда.

Ответ отправлен: 01.02.2003, 21:15
Отправитель: Igoryk


Отвечает Maverick

Здравствуйте, Sslash!
1.Скинул
2.Пару дней назад ответили на этот вопрос.
4.Ну да, iret


Ответ отправлен: 31.01.2003, 05:34
Отправитель: Maverick


Отвечает Ayl

Здравствуйте, Sslash!
1. См.Приложение
2. Из процедуры выгрузки в твоем модуле. Т.е. ты выполняешь те же действия, только прямо в резидентной части. Или можно проверять ключ в командной строке и выгружать при инсталяции. Кстати, твой код не корректен. Потому что, во-первых, ты не восстанавливаешь старый обработчик, в результате (т.к. процедуру обработки прерывания ты выгрузил) при последующих обращениях к этому прерыванию может произойти ошибка. Во-вторых, ты не проверяешь возможность выгрузки себя из памяти. Потому что если твой обработчик не первый в каскаде, то чистить память ты не имеешь права. В этом случае ты должен поставить флаг блокировки работы твоего резидента.
Как должна выглядеть процедура выгрузки резидента:
1. Проверить возможность выгрузки. Для этого ты должен сравнить значения адресов всех перехваченных тобой прерываний на соответствие твоим обработчикам.
2. Если хотя бы один из векторов не указывает на твой обработчик - ничего не делаешь, просто выставляешь флаг блокировки резидента.
3. Запрещаешь прерывания.
4. Восстанавливаешь все перехваченные прерывания.
5. Разрешаешь прерывания.
6. Очищаешь память.
3. Не понял вопрос. Скорее всего, нет.
4. Что-то тоже непонятно сформулирован вопрос. По команду iret управление будет передано прерванной программе. Куда ты еще хочешь передать управление?

Приложение:

Ответ отправлен: 31.01.2003, 14:40
Отправитель: Ayl


 Вопрос № 2537

Здравствуйте уважаемые эксперты.
Написал boot сектор для дискеты 1.44 мб, который грузит в память файл kernel.com. Работает нормально, но для файлов меньше 50 кб (а хотелось бы 64 кб).
Функция 02h прерывания 13h выдает ошибку с кодом 09h.
Не могу понять в чем проблема, уже 2 дня мучаюсь.
Помогите пожалуйста.


Приложение:


Вопрос отправлен: 31.01.2003, 11:59
Отправитель: Kostyan

[Следующий вопрос >>] [Список вопросов]

Отвечает Igoryk

Добрый день, Kostyan!
А здесь уже ничего не поделаешь. Эта функция просто не поддеривает файлы > 64 Кб. Варианты решения: загрузить два файла (т.е. разбить kernel.com) именно так поступает DOS. Либо перейти в защищенный режим и написать драйвер для общения с дисководом.

Ответ отправлен: 01.02.2003, 21:15
Отправитель: Igoryk


Отвечает Broken Sword

Приветствую Вас, Kostyan!
О! наконец то. первый стоящий вопрос за последние пол года (а может и больше)
Дело тут вот в чем. У тебя происходит запись в память начиная с адреса 330:0 (или линейный адрес 3300h). Но как ты знаешь, старшие 4 бита этого адреса хранятся в порте 81h (канал 2 DMA для работы с дисководами), поэтому границу 1000:0 (или 10000h) "пересекать" нельзя. То же самое относится к границам 2000:0 и 3000:0
Теперь смотри, получается что всего ты можешь записать начиная с того адреса который ты выбрал - 10000h-3300h=CD00h или 52480 байт (51Кб).
Короче, для записи файла размером 64Кб тебе нужно выровнять линейный адрес куда ты будешь писать на границу 64Кб или я щас еще посмотрю что можно сделать...

Ответ отправлен: 31.01.2003, 14:44
Отправитель: Broken Sword


 Вопрос № 2538

Подскажите ссылку на хорошие Include-файлы для Tasm'а(под Windows) для режима IDEAL.



Вопрос отправлен: 31.01.2003, 16:14
Отправитель: draGON (dtdcs@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает Igoryk

Доброе время суток, draGON!
на wasm.ru точно есть inc-файлы.

Ответ отправлен: 01.02.2003, 21:15
Отправитель: Igoryk


Отвечает Bob Johnson

Доброе время суток, draGON!
Для обычного режима есть у меня на странице. bobjohnson.nm.ru


Ответ отправлен: 01.02.2003, 21:25
Отправитель: Bob Johnson



Форма отправки вопроса

Внимание!
Форма может работать некорректно в почтовых программах "Microsoft Outlook" и "Microsoft Outlook Express". В программе The Bat! подобные формы не работают вообще!
После нажатия на кнопку "Отправить", будет открыто второе окно. Заметьте, что в некоторых браузерах могут стоять запреты на открытие других окон, а также "чрезмерное" кэширование данных, при этом факт отправки Вашего вопроса стоит под сомнением.
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

© 2002 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (37)
C / C++ (28)
Perl (7)
Delphi (18)
Pascal (24)
Basic / VBA (12)
Java / JavaScript (12)
PHP (8)
MySQL / MSSQL (8)
Пользователю
Windows 95/98/Me (35)
Windows NT/2000/XP (29)
"Железо" (31)
Поиск информации (18)
Администратору
Windows NT/2000/XP (14)
Linux / Unix (13)
Юристу
Гражданское право (10)
Семейное право (7)
Трудовое право (6)
КоАП (5)

Отправить вопрос всем экспертам выбранной рассылки.




Яндекс цитирования

© 2002 Россия, Москва. Авторское право: RusFAQ.ru


http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное