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

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.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

Программисту
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.


Яндекс цитирования
© 2001-2003 Россия, Москва. Авторское право: Калашников О.А.


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

В избранное