Рассылка закрыта
При закрытии подписчики были переданы в рассылку "RFpro.ru: Ассемблер? Это просто! Учимся программировать" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
RusFAQ.ru: программирование на языке Assembler
Информационный Канал Subscribe.Ru |
RusFAQ.ru: программирование на языке Assembler
Выпуск № 651
от 17.10.2003, 18:30
Администратор: Имя: Калашников О.А. URL: Информационный ресурс ICQ: 68951340 Россия, Москва |
О рассылке: Задано вопросов: 4329 Отправлено ответов: 12578 Активность: 290.5 %
|
Список экспертов, ответы которых опубликованы в данном выпуске |
Bob Johnson Статус: Профессиональный Общий рейтинг: 150.76 URL: Программирование [Подробней >>] |
Евгений Иванов Статус: Профессиональный Общий рейтинг: 140.81 URL: Super Assembler Software Телефон: НСС +7 831 3107039 [Подробней >>] |
Dark_Lord Статус: Профессиональный Общий рейтинг: 110.92 [Подробней >>] |
Maverick Статус: Профессиональный Общий рейтинг: 123.61 URL: Эхоконференция по вирмейкингу Телефон: 89039415024 (BeeLine GSM) [Подробней >>] |
ASMодей Статус: Профессиональный Общий рейтинг: 112.75 [Подробней >>] |
Hangatyr Статус: Профессиональный Общий рейтинг: 111.51 [Подробней >>] |
dr_dolphin Статус: Доверительный Общий рейтинг: 122.98 [Подробней >>] |
Ayl Статус: Профессиональный Общий рейтинг: 117.32 [Подробней >>] |
St Статус: Профессиональный Общий рейтинг: 106.2 [Подробней >>] |
Shef Статус: Начальный Общий рейтинг: 103.17 [Подробней >>] |
ViRUS Статус: Начальный Общий рейтинг: 105.98 [Подробней >>] |
Краткий перечень вопросов |
Вопрос № 4300. Здравствуйте, уважаемые эксперты. Начал изучать асм под винды, но возник вопрос. Известно, что для ... (ответов: 3)
Вопрос № 4301. Здравствуйте, Эксперты. Я написал код (переписал с Wasm.ru). Но он не работает. Почему (переписан вр... (ответов: 2)
Вопрос № 4302. Здравствуйте! Такой вот детский вопрос. Пишу прогу под Win32. Каким образом объявить в Масме, что с... (ответов: 4)
Вопрос № 4303. Уважаемые эксперты , как в WIN NT/2000/XP создать(зарегистрировать) свою службу на Ассемблере...... (ответов: 1)
Вопрос № 4304. Уважаемые эксперты, вопрос как на Ассемблере под Win32 сконвертировать целое число в строку, мож... (ответов: 4)
Вопрос № 4305. как перевести символы из cp-866 в cp-1251 и обратно. Вот что я натыкал; но обратно не получается та... (ответов: 3)
Вопрос № 4306. Здраствуйте уважаемые эксперты. Где можно достать нормальную документацию по написанию ОС и про NASM... (ответов: 3)
Вопрос № 4307. Доброе время суток вам, господа Эксперты! Недавно возникла проблема: не могу запустить проиложение и... (ответов: 4)
Вопрос № 4308. Программа GoBack прослеживает все изменения на жестком диске (изменение, удаление, создание файлов и... (ответов: 3)
Вопросов: 9, ответов: 27
Вопрос № 4300 |
Здравствуйте, уважаемые эксперты.
Начал изучать асм под винды, но возник вопрос. Известно, что для создания основного окна нужно регистрировать класс окна, там задавать цвет фона и другие параметры. Затем создается само окно. Как можно поменять цвет фона уже созданного и выведеного на экран окна, например, при нажатии на кнопку, какие сообщения нужно посылать? Заранее благодарен.
Вопрос отправлен: 10.10.2003, 16:31
Отправитель: a1 (a111_666@mail.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Добрый день, a1!
Ты можешь сам обрабатывать WM_ERASEBKGND и в нем сам очищать задний фон тем цветом, каким хочешь. При этом значение, переданное в классе, вроде как не имеет значения.
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 11.10.2003, 01:25
Отправитель: Bob Johnson
Отвечает Евгений Иванов
Приветствую Вас, a1!
WM_ERASEBKGND
Тебе приходит HDC.
Используй его для отрисовки фона.
И возврати не ноль для указания, что ты перерисовал фон.
* EMan1.5: ---===*** Love is real! ***===---
Ответ отправлен: 11.10.2003, 10:40
Отправитель: Евгений Иванов
Отвечает Dark_Lord
Добрый день, a1!
GetClassLong(hWindow,GCL_HBRBACKGROUND); для получения значения и SetClassLong(hWindow,GCL_HBRBACKGROUND, Param); для задание, например:
(push param)
push GCL_HBRBACKGROUND
push hWindow
call (Set)GetClassEx
Ответ отправлен: 10.10.2003, 17:29
Отправитель: Dark_Lord
Вопрос № 4301 |
Здравствуйте, Эксперты.
Я написал код (переписал с Wasm.ru). Но он не работает. Почему (переписан вроде бы правильно)? Какая есть альтернатива этого кода. Просьба не упрекать за лишние операторы или переменные, что, мол, не понятно, что я делаю - это первые шаги к разбору таблицы экспорта. Кстати, буду благодарен за любую инфу по этой теме.
Приложение:
Вопрос отправлен: 11.10.2003, 01:36
Отправитель: MSoft (msoft@list.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Евгений Иванов
Добрый день, MSoft!
> sub ebp,[next]
Вот это мне не нравится.
Попробуй sub ebp, offset next
* EMan1.5: ---===*** Love is real! ***===---
Ответ отправлен: 11.10.2003, 10:41
Отправитель: Евгений Иванов
Отвечает Maverick
Доброе время суток, MSoft!
Так ты пишешь в переменную, а она у тебя в секции кода.
Секция кода по умолчанию для записи запрещена.
Если не хочешь вручную ничего патчить и разбираться с этим используй утилитку pewrsec.com
Она разрешает секцию на запись.
Если трабл не в этом, напиши, погляжу сам код. (не смотрел)
maverick@nightmail.ru
Ответ отправлен: 12.10.2003, 14:49
Отправитель: Maverick
Вопрос № 4302 |
Здравствуйте!
Такой вот детский вопрос.
Пишу прогу под Win32. Каким образом объявить в Масме, что содержимое регистра eax является указателем на структуру.
То бишь все происходит приблизительно так:
invoke GlobalAlloc,...
mov hMem,eax
invoke GlobalLock,eax ;
mov Data,eax ;- теперича, как сказать Масму, что выделенная область памяти есть структура, чтоб не париться и не считать смещения в ней?
потому что конструкции наподобие
mov eax.size,030h
он решительно посылает нафиг(и, вероятно, правильно делает)Спасибо.
GreenWitch
Вопрос отправлен: 11.10.2003, 03:46
Отправитель: GreenWitch (GreenWitch@pochta.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает ASMодей
Добрый день, GreenWitch!
Вместо таких конструкций в MASM можно писать так: mov [eax+size],030h
Ответ отправлен: 11.10.2003, 13:16
Отправитель: ASMодей
Отвечает Bob Johnson
Доброе время суток, GreenWitch!
Попробуй так:
mov [eax.size], 030h
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 14.10.2003, 22:16
Отправитель: Bob Johnson
Отвечает Евгений Иванов
Доброе время суток, GreenWitch!
Всё намного проще.
Используй TYPE.
struc Help
one dd ?
two dd ?
ends Help
OneHelp Help <4, 5>
TwoHelp Help <>
mov esi, offset OneHelp
mov edi, offset TwoHelp
mov eax, [(type Help esi).one]
mov [(type Help edi).two],eax
Бывай!
* EMan1.5: ---===*** Love is real! ***===---
Ответ отправлен: 11.10.2003, 10:42
Отправитель: Евгений Иванов
Отвечает Dark_Lord
Добрый день, GreenWitch!
Например чтоб показать масму, что в еах находится offset WNDCLASSEX надо записать следующее:
assume eax:PTR WNDCLASSEX
, после чего еах можно использовать следующим образом:
mov [eax].cbSize, xxx
Ответ отправлен: 11.10.2003, 10:52
Отправитель: Dark_Lord
Вопрос № 4303 |
Уважаемые эксперты , как в WIN NT/2000/XP создать(зарегистрировать) свою службу на Ассемблере.....
Вопрос отправлен: 11.10.2003, 06:35
Отправитель: greg
[Следующий вопрос >>] [Список вопросов]
Отвечает Hangatyr
Здравствуйте, greg!
Для управления службами используются эти функции:
OpenSCManager
CreateService
StartService
DeleteService
CloseServiceHandle
Описание их можно посмотреть в msdn. OpenSCManager
получает хэндл Service Control Manager, который далее передается функциям CreateService, DeleteService, и т.д.
Ответ отправлен: 12.10.2003, 09:14
Отправитель: Hangatyr
Вопрос № 4304 |
Уважаемые эксперты, вопрос как на Ассемблере под Win32 сконвертировать целое число в строку, может есть готовые функции , заранее благодарен.....
Вопрос отправлен: 12.10.2003, 08:04
Отправитель: greg
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Приветствую Вас, greg!
Есть - wsprintf.
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 14.10.2003, 22:17
Отправитель: Bob Johnson
Отвечает Hangatyr
Доброе время суток, greg!
Есть api wsprintf. Еще можешь посмотреть dwtoa.asm в пакете masm32.
Ответ отправлен: 12.10.2003, 09:03
Отправитель: Hangatyr
Отвечает Евгений Иванов
Здравствуйте, greg!
wsprintf, wvsprintf.
* EMan1.5: ---===*** Love is real! ***===---
Ответ отправлен: 12.10.2003, 13:36
Отправитель: Евгений Иванов
Отвечает dr_dolphin
Здравствуйте, greg!
Используй функцию API wsprintf из user32.dll
До встречи !
Ответ отправлен: 13.10.2003, 08:54
Отправитель: dr_dolphin
Вопрос № 4305 |
как перевести символы из cp-866 в cp-1251 и обратно. Вот что я натыкал; но обратно не получается так как изменяется
код символа
Приложение:
Вопрос отправлен: 12.10.2003, 17:37
Отправитель: Саша
[Следующий вопрос >>] [Список вопросов]
Отвечает dr_dolphin
Здравствуйте, Саша!
Если делаешь под Windows, то лучше использовать функции
API CharToOem/OemToChar.
А для XLAT варианта понядобятся 2 таблицы перекодировки для каждой кодовой страницы.
Пока !
Ответ отправлен: 13.10.2003, 08:52
Отправитель: dr_dolphin
Отвечает Евгений Иванов
Добрый день, Саша!
Смотри мой Coder на моём сайте.
tablWIN_DOS:
c_1 = 0
rept 128
db c_1
c_1 = c_1+1
endm
db 3fh,3fh,27h,3fh,22h,3ah,0c5h,0d8h,3fh,25h,3fh,3ch,3fh,3fh,3fh,3fh,3fh,27h
db 27h,22h,22h,7,2dh,2dh,3fh,54h,3fh,3eh,3fh,3fh,3fh,3fh,0ffh,0f6h,0f7h,3fh,0fdh,3fh,0b3h,15h,0f0h,63h,0f2h
db 3ch,0bfh,2dh,52h,0f4h,0f8h,2bh,49h,69h,3fh,0e7h,14h,0fah,0f1h,0fch,0f3h,3eh,3fh,3fh,3fh,0f5h,80h,81h,82h,83h
db 84h,85h,86h,87h,88h,89h,8ah,8bh,8ch,8dh,8eh,8fh,90h,91h,92h,93h,94h,95h,96h,97h,98h,99h,9ah,9bh,9ch
db 9dh,9eh,9fh,0a0h,0a1h,0a2h,0a3h,0a4h,0a5h,0a6h,0a7h,0a8h,0a9h,0aah,0abh,0ach,0adh,0aeh,0afh,0e0h,0e1h,0e2h,0e3h,0e4h,0e5h
db 0e6h,0e7h,0e8h,0e9h,0eah,0ebh,0ech,0edh,0eeh,0efh
tablDOS_WIN:
c_1 = 0
rept 128
db c_1
c_1 = c_1+1
endm
c_1 = 192
rept 48
db c_1
c_1 = c_1+1
endm
db 2Dh,2Dh,2Dh,0A6h,2Bh,0A6h,0A6h,0ACh,0ACh,0A6h,0A6h,0ACh,2Dh,2Dh,2Dh,0ACh
db 4Ch,2Bh,54h,2Bh,2Dh,2Bh,0A6h,0A6h,4Ch,0E3h,0A6h,54h,0A6h,3Dh,2Bh,0A6h
db 0A6h,54h,54h,4Ch,4Ch,2Dh,0E3h,2Bh,2Bh,2Dh,2Dh,2Dh,2Dh,0A6h,0A6h,2Dh
db 0F0h,0F1h,0F2h,0F3h,0F4h,0F5h,0F6h,0F7h,0F8h,0F9h,0FAh,0FBh,0FCh,0FDh,0FEh,0FFh
db 0A8h,0B8h,0AAh,0BAh,0AFh,0BFh,0A1h,0A2h,0B0h,95h,0B7h,76h,0B9h,0A4h,0A6h,0A0h
* EMan1.5: ---===*** Love is real! ***===---
Ответ отправлен: 12.10.2003, 20:53
Отправитель: Евгений Иванов
Отвечает Ayl
Доброе время суток, Саша!
Что-то я не понял, какая у тебя проблема.
Похоже, ты неправильно формируешь таблицы перекодировок.
У тебя должно быть 2 таблицы (при желании можно и одной обойтись): win2alt и alt2win.
В первой ты заполняешь 128 символов с кодами 128-255 так, как они соответствуют виндовой кодировке (т.е. индекс - это код символа в виндовой кодировке, значение - код символа в альтернативной). Вторая таблица - наоборот.
Почему у тебя в таблицах так много знаков вопроса? Что, нет однозначного соответствия символов?
Теперь как перекодировать. Берешь очередной код символа, в зависимости от направления перекодировки выбираешь соответственную таблицу и, используя код символа как индекс, выбираешь новый код символа. Естественно, что символы с кодами 0-127 перекодировать не нужно.
Ответ отправлен: 13.10.2003, 12:53
Отправитель: Ayl
Вопрос № 4306 |
Здраствуйте уважаемые эксперты. Где можно достать нормальную документацию по написанию ОС и про NASM?
Вопрос отправлен: 12.10.2003, 18:31
Отправитель: Alexey (sezemin@rambler.ru)
[Следующий вопрос >>] [Список вопросов]
Отвечает Bob Johnson
Доброе время суток, Alexey!
Про nasm - на его странице http://nasm.sourceforge.net
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 14.10.2003, 22:18
Отправитель: Bob Johnson
Отвечает Евгений Иванов
Доброе время суток, Alexey!
http://asmfanat.narod.ru/soft/nasmdocrus.rar
* EMan1.5: ---===*** Love is real! ***===---
Ответ отправлен: 12.10.2003, 20:54
Отправитель: Евгений Иванов
Отвечает dr_dolphin
Здравствуйте, Alexey!
Например NonDot.org
Пока !
Ответ отправлен: 13.10.2003, 08:51
Отправитель: dr_dolphin
Вопрос № 4307 |
Доброе время суток вам, господа Эксперты!
Недавно возникла проблема: не могу запустить проиложение из TSR под ДОС'ом.
Цель была такой: вызывать TechHelp (старый, резидентом не грузится) и
подобные ему справочники, не выходя из текстового редактора, причем
временного выхода и запуска других программ в редакторе нет. Идея: в памяти
висит TSR, по нажатию хот-кея появляется меню со списком программ,
выбранная программа запускается, после выхода управление передается
предыдущей программе. Проблема: если я меняю текущую PSP с PSP запущенного
процесса на PSP моего резидента (инициирую запуск программы от имени
текущего процесса), то ДОС ругается на нехватку памяти, что очевидно --
резидент урезает себя после загрузки, и памяти для запуска нового процесса
не остается. Если же я оставляю PSP без изменений, то... опять нехватка
памяти: после загрузки программы ей становится доступной ВСЯ свободная
память. Ее, конечно, можно урезать до необходимого размера, а затем
увеличить, так, IMHO, будет вежливо и корректно. Но, похоже, ни один
компилятор так не поступает. Единственный выход который я нашел -- это
грузить программу как оверлей, а затем передавать ей управление. Но мне
нужно ведь выбирать, какую программу я хочу запустить! Пробовал на M$-DOS
6.22 и PC-DOS 7.00. Результаты везде одинаковые, вне зависимости от
программы, идущей на переднем фоне (BC / VC / Word&Deed etc) и типа
запускаемой программы (com или exe). Самый последний (само)убийственный
вариант: ручками перебирать все memory control block, и загружать в них
нужную программу. Но это геммор еще больший, чем гидродинамика ;-) Если
что-нибудь можно сделать -- посоветуйте!
Вопрос отправлен: 13.10.2003, 11:21
Отправитель: Sphinkx
[Следующий вопрос >>] [Список вопросов]
Отвечает St
Привет, Sphinkx!
А вы уверены что свободная память есть? Ведь редактору кроме самого себя необходимо еще держать в памяти и текст. Вполне возможно что он использует всю свободную память.
St
Ответ отправлен: 13.10.2003, 12:25
Отправитель: St
Отвечает Shef
Доброе время суток, Sphinkx!
Геморрой с 640 Кб памяти...
Попробуй посчитать сколько памяти надо для запуска тех приложений, которые ты хочет вызывать по хот-кею.
Потом запускаешь свой резидент. Резидент занимает себе минимум памяти под себя, потом просит у DOS выделить себе память, которую ты посчитал для TechHelp'а и т.п.
Дальше резидент сидит в памяти и ждёт "горячую клавишу". Дождавшись освобождает блок зарезервированный для себя. Получился блок памяти, куда DOS может загрузить программу. А потом резидент опять забирает блок памяти, когда завершается работа с вызванным приложением.
+---------+
|резидент |
+---------+
|резерв |<-сюда можно грузить TechHelp etc
+---------+
|программа|<-BC / VC / Word&Deed etc
+---------+
Ответ отправлен: 13.10.2003, 14:11
Отправитель: Shef
Отвечает Евгений Иванов
Добрый день, Sphinkx!
Используй MS Windows. :-)
Вот мне надо запустить NG-просмотрщик, я запускаю VC, а там у меня меню и запускается EH.
Так то я в FAR-e, а нужна справка - раз в VC...
Хотя есть мысль написать для FAR приладу для просмотра NG-файлов.
А ещё лучше сжимать их...
Бывай.
* EMan1.5: ---===*** Love is real! ***===---
Ответ отправлен: 13.10.2003, 16:49
Отправитель: Евгений Иванов
Отвечает Ayl
Здравствуйте, Sphinkx!
Да, проблема! Боюсь, что нифига не выйдет.
То есть надо либо сразу же отрезать кусок памяти для последующей загрузки программ, либо как-то организовывать своппинг памяти. Например, запускаешь свой резидент и запоминаешь текущее состоянии свободной памяти. Далее, загружаешь свой редактор или что там еще. При активации резидента сохраняешь на диске всю область памяти, которая перед запуском резидента была свободной. Меняешь PSP на PSP резидента. Восстанавливаешь MCB на момент запуска резидента. Теперь у тебя есть кусок свободной памяти. Загружаешь туда нужную программу. После того, как она отработает, восстанавливаешь MCB, восстанавливаешь с диска сохраненную память и восстанавливаешь PSP. Выходишь из резидента.
По идее, должно отработать, только если прерванная программа не подменяет вектора прерываний. Хотя с этим тоже можно побороться - например, вместе с сохранением памяти также сохранять и область векторов прерываний, заменить критичные прерывания на собственные либо на стандартные (например, восстановить состояние векторов прерываний на момент запуска резидента).
Вот такие мысли. Если реализуешь - будет круто.
Ответ отправлен: 13.10.2003, 13:30
Отправитель: Ayl
Вопрос № 4308 |
Программа GoBack прослеживает все изменения на жестком диске (изменение, удаление, создание файлов и пр.). Как она это делает? Я предполагаю, что надо написать драйвер, который будет это отлавливать, но может быть я не прав. В любом случае, ответьте, пожалуйста. Если проблема имеет различные оттенки на Win9x и WinNT, прошу указать. Может быть хотя бы линки или литературу подскажете?
Вопрос отправлен: 13.10.2003, 18:25
Отправитель: CodeAxe
[Следующий вопрос >>] [Список вопросов]
Отвечает ViRUS
Доброе время суток, CodeAxe!
VxD - драйвер под 9x, WDM - драйвер под 2k.
Источники... посмотри на codenet.ru, а там по ссылкам.
Вообще круче всего под 9x - перехватывать на себя API - функцию, как CIH! (Вылазишь на Ring0 итд.)
Сорцы чиха в нете где-то есть...
Ответ отправлен: 14.10.2003, 12:07
Отправитель: ViRUS
Отвечает Евгений Иванов
Добрый день, CodeAxe!
Делается это при помощи ловушек (Hook).
* EMan1.5: ---===*** Love is real! ***===---
Ответ отправлен: 13.10.2003, 18:42
Отправитель: Евгений Иванов
Отвечает Bob Johnson
Добрый день, CodeAxe!
Вариант с драйвером будет работать - это точно. Может быть, конечно, возможно это сделать и без него... Информация по тому, как создать драйвер, который мониторит файловую систему для 9х есть у меня на странице. Адрес: http://bobjohnson.nm.ru
* EMan1.5: ---===*** The game we play ***===---
Ответ отправлен: 14.10.2003, 23:43
Отправитель: Bob Johnson
Форма отправки вопроса |
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.
(C) 2002-2003 Команда RusFAQ.ru.
Вопрос и дополнение |
Ваш вопрос:
Приложение (если необходимо):
Получить ответов:
Выбор рассылки |
Программисту Assembler (30) C / C++ (31) Perl (7) Builder / Delphi (23) Pascal (24) Basic / VBA (8) Java / JavaScript (8) PHP (12) Криптография (9) WinAPI (15) |
Пользователю Windows 95/98/Me (52) Windows NT/2000/XP (63) "Железо" (37) Поиск информации (27) |
Администратору Windows NT/2000/XP (38) Linux / Unix (17) |
Юристу Гражданское право (11) Семейное право (8) Трудовое право (8) КоАП (8) |
Отправить вопрос всем экспертам выбранной рассылки.
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.
http://subscribe.ru/
E-mail: ask@subscribe.ru |
Отписаться
Убрать рекламу |
В избранное | ||