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

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


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

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

Выпуск № 575
от 22.06.2003, 17:40

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


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

Дмитрий
Статус: Профессиональный
Общий рейтинг: 139.43
[Подробней >>]
Tigran K. Kalaidjian
Статус: Опытный
Общий рейтинг: 119.01
URL: Методы оптимизации работы ПК
[Подробней >>]
Bob Johnson
Статус: Профессиональный
Общий рейтинг: 152.07
URL: Программирование
[Подробней >>]
 
Hayk
Статус: Опытный
Общий рейтинг: 113.53
URL: Perosnal Web Page which has been created long ago.
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 137.39
[Подробней >>]
Lynx
Статус: Опытный
Общий рейтинг: 122.86
Телефон: (8442) 750522
[Подробней >>]
 
Hangatyr
Статус: Опытный
Общий рейтинг: 115.14
[Подробней >>]
Ayl
Статус: Профессиональный
Общий рейтинг: 118.49
[Подробней >>]
Zedr0n
Статус: Начальный
Общий рейтинг: 108.33
[Подробней >>]
 
Ramzes
Статус: Профессиональный
Общий рейтинг: 124.97
URL: Microsoft homepage
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 122.03
URL: мой сайт
[Подробней >>]
_vt
Статус: Опытный
Общий рейтинг: 122.6
[Подробней >>]
 
Pin
Статус: Опытный
Общий рейтинг: 117.01
URL: My HOMEPAGE
[Подробней >>]
vitya
Статус: Профессиональный
Общий рейтинг: 108.12
[Подробней >>]
St
Статус: Опытный
Общий рейтинг: 107.67
[Подробней >>]
 
baldr
Статус: Профессиональный
Общий рейтинг: 112.38
URL: Сайт об ОС DOS. Всем, кто любит эту ОС!
[Подробней >>]
Dark_Lord
Статус: Профессиональный
Общий рейтинг: 112.37
[Подробней >>]
Илья
Статус: Опытный
Общий рейтинг: 103.73
[Подробней >>]


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

Вопрос № 3497. Здравствуйте многоуважаемые. Вышлите пожалуйсто книжечку Тима Кницлеря "Руководство программист... (ответов: 4)
Вопрос № 3498. Уважаемые эксперты, как возможно к графическому, или какому нибудь другому файлу прикрепить exe файл... (ответов: 8)
Вопрос № 3499. Hi! Вопрос вот какой: при старте и перезагрузке (кстати а есть ли разница)как инятся регистры: с cs ... (ответов: 4)
Вопрос № 3500. Всем здрасте Опять модем. Остался последний штрих. Вот представьте ситуацию: есть такие провайдеры, ... (ответов: 3)
Вопрос № 3501. Вы че лохи?... (ответов: 3)
Вопрос № 3502. Здравствуйте! Решит намедни побаловаться с SoftIce - обломчик случился:( нужно было обмануть инсталя... (ответов: 3)
Вопрос № 3503. Здравствуйте, Эксперты! Только начал изучать Assembler. Выбрал MASM но возникли вопросы. 1. Есть ли ... (ответов: 4)
Вопрос № 3505. Привет, Xперты! Есть программа на C++. Я написал другую (тоже на C++) теперь мне надо сделать так, ч... (ответов: 3)
Вопрос № 3506. Всем привет! Нашел в VS 7.0 NET новые версии файлов ml и link: ml - Macro Assembler Version 7.00.946... (ответов: 2)
Вопрос № 3507. Уважаемые эксперты! Помогите подключить USB принтер так, что-бы он печатал под досом или в эмуляции ... (ответов: 1)
Вопрос № 3508. Уважаемые экперты, у меня вопрос. Есть локальная сеть, естьь программа Chat-для локальной сети как п... (ответов: 5)
Вопрос № 3509. Привет Я использую в программе (Win32) отдельный поток который создает задержку от 10 мс и больше (G... (ответов: 4)
Вопрос № 3510. Уважаемые эксперты при изучение asm столкнулся с проблемой назначения регистров. Сейчас разбираю рег... (ответов: 7)
Вопрос № 3511. Уважаемые эксперты! Подскажите пожалуйста, какие поля в структуре OPENFILENAME являются обязательным... (ответов: 5)

Вопросов: 14, ответов: 56


 Вопрос № 3497

Здравствуйте многоуважаемые.
Вышлите пожалуйсто книжечку Тима Кницлеря "Руководство программиста по работе со звуком" (знаю, что у моего земляка Дмитрия она точно есть - вопрос 3328). Еще хотелось-бы Р.Журдена. Очень хотелось-бы почитать... А вообще хочу попробовать аудио проигрыватель свой написать - я это так вижу - берем сжатую музычку (mp3 например), преобразуем это в wav и проигрываем с помощью API PlaySound. Правильно или я ошибаюсь? А может лучше отказаться от API и проигрывать через драйвер, как Зубков учил (с программированием DSP)?



Вопрос отправлен: 17.06.2003, 18:08
Отправитель: GHopper (gh_trash@mail.ru)

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

Отвечает Дмитрий

Доброе время суток, GHopper!
По-поводу Тима Книтцеля. Книжка классная! Но есть одна проблема. Она у меня в бумажном варианте. Могу подсказать где ее достать. Берешь два чистых конверта и листок бумаги (надеюсь классической почтой ты еще не разучился пользоваться?). Пишешь письмо по адресу 107113 Москва ая 10 Биняковскому А. А. Так мол, и так. Вышлите пожалуйста каталог распространяемой вами литературы. Тебе пришлют брошюрку, с помощью которой ты сможешь заказать эту книжку (и еще кучу интересных экземплярчиков!) по почте. Я заполучил ее именно таким образом, отдав за нее где-то 150 р. Поверь, она того стоит! Кстати! Ребята заметьте - то, что в мире "ОНА" в большинстве случаев просто великолепно (за исключением, пожалуй, гонореи). В общем - удачи!

Ответ отправлен: 19.06.2003, 05:16
Отправитель: Дмитрий


Отвечает Tigran K. Kalaidjian

Здравствуйте, GHopper!
Ушло мылом.

Ответ отправлен: 18.06.2003, 09:14
Отправитель: Tigran K. Kalaidjian


Отвечает Bob Johnson

Здравствуйте, GHopper!
> преобразуем это в wav и проигрываем с помощью API PlaySound
Нет! Т.е. можно и так, но это хреново - прикинь, вначале у тебя mp3 декодируется, это занимает некоторое время и место на диске, а потом только начинает проигрываться.
Тебе нужно так называемое streaming sound playback, т.е. ты декодируешь файл в память по мере необходимости, а звуковая карта это воспроизводит.
> А может лучше отказаться от API и проигрывать через драйвер, как Зубков учил (с программированием DSP)
это невозможно (под виндами)
Я обычно рекомендую в таких ситуациях использовать DirectSound. Там надо вызвать всего-то штук 6-8 функций и все! Только не используй DirectSoundNotify, т.к. он некорректно работает на новых звуковухах - используй переодически GetCurrentPosition. (ну это потом, если начнешь писать прогу под DirectSound, то поймешь к чему).

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 18.06.2003, 17:40
Отправитель: Bob Johnson


Отвечает --- Нет данных ---

Добрый день, GHopper!


Ответ отправлен: 18.06.2003, 07:35
Отправитель: --- Нет данных ---


 Вопрос № 3498

Уважаемые эксперты, как возможно к графическому, или какому нибудь другому файлу прикрепить exe файл, по моему это один из способов распространения вирусов.
Если можно оюъяснити, и приведите пример программу с коментариями, или хотябы дайте линки!!!
Большое спасибо!!!!



Вопрос отправлен: 17.06.2003, 19:16
Отправитель: Ujin

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

Отвечает --- Нет данных ---

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


Ответ отправлен: 18.06.2003, 07:35
Отправитель: --- Нет данных ---


Отвечает Hayk

Доброе время суток, Ujin!
Уже ответили да? Так что побыстрее зайди в Explorer-е Tools/Foldes Options/View и сними эту чёртову птичку Hide File Extensions for Known File types.

Ответ отправлен: 18.06.2003, 10:58
Отправитель: Hayk


Отвечает Bob Johnson

Здравствуйте, Ujin!
Прикрепить-то можно, но вот выполняться он не будет :)
Потому что графический файл не подразумевает внутри себя никакого кода, только данные (сжатые или нет). Если бы это было возможно, то уже такие вирусы были бы давно созданы и посылали бы себя через электронную почту :)

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 18.06.2003, 17:40
Отправитель: Bob Johnson


Отвечает Tigran K. Kalaidjian

Здравствуйте, Ujin!
Вы можете присоединить к исполняемому файлу любой другой(графику, текст и т.д.), но это всё равно будет исполняемый файл. Программа для такого "склеивания" называется MJ - Modified Joiner. В принципе это можно сделать с помощью самораспаковывающихся архивов, но EXE-шник всё равно остаётся таковым. В картинку "вшить" программу, увы, нельзя. Хотя Вы можете обмануть нерадивого пользователя и приделать "второе" расширение(т.е. добавить элементы с точкой к имени файла), например text.txt.exe и сменить иконку файла на иконку тектового файла (например, утилитой Restorator). Если у пользователя стоят настройки по умолчанию (для Win), то у файлов с зарегистрированным типом данных не будут отображаться расширения. Вот у Вас и получится обычный на вид текстовый файл text.txt с "интересной" начинкой(если Вы "приклеили" к программе текст, то сам текст будет открываться, а программа будет выполнять своё черное дело, хотя пользователю это может быть незаметно) =)

Ответ отправлен: 18.06.2003, 09:10
Отправитель: Tigran K. Kalaidjian


Отвечает masquer

Добрый день, Ujin!
На самом деле к файлу можно что угодно прилепить, а вот для того, что заставить какую-то часть файла считать исполняемым кодом 2 вещи используются - либо заражается дефолтовый просмотрщик таких файлов, либо используется переполнение буфера у просмотрщика. Например стандартный микрософтовский фильтр png файлов имеет ошибку переполнения буфера, и этим можно воспользоватся.

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


Отвечает Lynx

Здравствуйте, Ujin!
Признаться честно я даже понятие не имею как это можно осуществить. Можно написать exeшник, который будет показывать картинку и заодно форматировать винт, но что бы картинку слепить с ехешником...


Ответ отправлен: 18.06.2003, 16:41
Отправитель: Lynx


Отвечает Hangatyr

Доброе время суток, Ujin!
Насколько я знаю, они не приклепляются, а просто берут себе имя вроде "picture.jpg .exe"
В некоторых случаях возможно распространение при помощи файлов, содержащих различного вида код. html (Scriptlet.TypeLib) тому пример.


Ответ отправлен: 18.06.2003, 03:02
Отправитель: Hangatyr


Отвечает Дмитрий

Здравствуйте, Ujin!
Прикрепить-то можно. Только вот не запустится он! Хотя распространение вирусов через графические файлы не миф. В свое время среди художников была популярна программа разведения и трассировки лучей (такая штука, типа Metacreations Bruce) название которой я к сожалению не помню. Так вот ее файлы содержали подобие макросов. А Corel Draw? Там вообще есть VBA! Но чтоб exe прикрепить скажем к gif. ИМХО, ничего это не даст.

Ответ отправлен: 20.06.2003, 10:44
Отправитель: Дмитрий


 Вопрос № 3499

Hi! Вопрос вот какой: при старте и перезагрузке (кстати а есть ли разница)как инятся регистры: с cs и ip все понятно, с остальными сегментнами регистрами понятно что их надо снова инить, про остальные регистры вообще ничего не известно. Так вот вопрос - какие значения хранятся при загрузке в них: 0, то что осталось при перезагрузке или вообще что угодно. Проясните плз.



Вопрос отправлен: 17.06.2003, 19:26
Отправитель: Псих

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

Отвечает --- Нет данных ---

Добрый день, Псих!


Ответ отправлен: 18.06.2003, 07:35
Отправитель: --- Нет данных ---


Отвечает Ayl

Доброе время суток, Псих!
ИМХО, для старта компа имеет значение только CS:IP. Далее запускается процедура POST, защитая в BIOS. Не думаю, что она свою работу строит на каких-либо преопределенных значениях регистров, логичнее думать, что она их сама инициализирует (скажем, те же CR-регистры). Хотя что-то о значениях флагов сказать можно - режим работы - реальный, прерывания - разрешены. И т.п.
Между стартом и холодной перезагрузкой (по RESET) разницы нет, а при горячей - не тестится память.

Ответ отправлен: 18.06.2003, 11:38
Отправитель: Ayl


Отвечает Hayk

Доброе время суток, Псих!
На CRx регистрах ИНЯЕТСЯ определённо что-то фиксированное. На некоторых битах EFLAGS тоже. Логика такая: те регистры, которыми процессор пользуется всегда, на каждом шаге, ане зависимости от типа команды (!), должны быть ИНИРИЗИРОВАНЫ( крутое словечко, Бог Америке долголетия за это ).

Ответ отправлен: 18.06.2003, 10:32
Отправитель: Hayk


Отвечает Zedr0n

Приветствую Вас, Псих!
Цитирую информацию из Hugi compos, документирующие те значение регистров, на которые вы можете рассчитывать.
ax ........................... 0000h
bx ........................... 0000h
cx ........................... 00ffh
dx ........................... == cs
di ........................... fffeh
si ........................... 0100h
ip ........................... 0100h
ds ........................... == cs
es ........................... == cs
ss ........................... == cs
sp ........................... fffeh
directionflag ................ 0
Это верно для любой .com программы. Надеюсь, я ответил на
ваш вопрос...

Ответ отправлен: 19.06.2003, 11:13
Отправитель: Zedr0n


 Вопрос № 3500

Всем здрасте
Опять модем. Остался последний штрих. Вот представьте ситуацию: есть такие провайдеры, которые при дозвоне к ним не требуют указания логина и пароля, т.е. это как бы интеренет в кредит, в конце месяца приходит счет за телефонные переговоры. Так вот, дозваниваюсь я к ним на модемный пул. После хэндшейка мой модем принимает, например, такие данные:
Red Hat Linux release 7.3 (Valhalla)
Kernel 2.4.18-3 on an i686
Все. По идее - запускай себе браузер да работай на здоровье в нете - так нет, удаленный модем чего то ждет... чего же?
пробовал отсылать ему всякие CR - в ответ приходит та же самая инфа (Red Hat Linux release 7.3 (Valhalla)
Kernel 2.4.18-3 on an i686). Чего ему нада?
Или вернее - что есть аналог нажатия кнопки "Продолжение" после появления окна терминала?



Вопрос отправлен: 17.06.2003, 23:03
Отправитель: Broken Sword (brokensword@mail.ru)

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

Отвечает --- Нет данных ---

Приветствую Вас, Broken Sword!


Ответ отправлен: 18.06.2003, 07:34
Отправитель: --- Нет данных ---


Отвечает Дмитрий

Добрый день, Broken Sword!
Я, конечно, не такой уж и эксперт, чтоб давать советы такому человеку. Но у меня тоже было куча проблем с модемными соединениями. Может что и будет полезным. Первое, на какой порт и по какому протоколу идет соединение (что там в хендшейке?)? Если просканировать порты, что там есть открытого? А если попинговать сервак? Это приглашение может быть всем, чем угодно. Скажем приглашением rlogin (мало-ли, может админ этого сервака любит динозавров). Стандартная раскладка портов вовсе не факт. Что получается, если использовать telnet на открытые порты? И последнее, даже если ведение счета идет от АТС, сервак все-равно требует идентификации. В том-же rlogin'е необходимо передать 4 asciiz строки! Я уже не говорю про POP3-SMTP протоколы. После подключения не помешало-бы собрать побольше инфы о текуших подключениях и их параметрах (netstat и т. д.).

Ответ отправлен: 19.06.2003, 06:13
Отправитель: Дмитрий


Отвечает Hayk

Здравствуйте, Broken Sword!
Какой у вас протокол? PPP ? Если PPP то смотрите в RFC LCP Packet Formats. Если не PPP то хоть какой-то...надо выяснить...

Ответ отправлен: 18.06.2003, 10:51
Отправитель: Hayk


 Вопрос № 3501

Вы че лохи?



Вопрос отправлен: 18.06.2003, 07:37
Отправитель: Hubba

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

Отвечает Ramzes

Приветствую Вас, Hubba!
Докатились ПИ@#$Ц на Х#$...
совсем обнаглел

Ответ отправлен: 18.06.2003, 17:20
Отправитель: Ramzes


Отвечает Bob Johnson

Здравствуйте, Hubba!
Эксперта Hubba и Hubb мы удалили, но на хрена было на этот вопрос отвечать??? (это я к остальным)

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 18.06.2003, 17:40
Отправитель: Bob Johnson


Отвечает Lynx

Здравствуйте, Hubba!
Мы нет, а ты???


Ответ отправлен: 18.06.2003, 16:41
Отправитель: Lynx


 Вопрос № 3502

Здравствуйте!
Решит намедни побаловаться с SoftIce - обломчик случился:(
нужно было обмануть инсталяшку (AC3PowerPack_Patch для Ulead DVD Workshop 1.3) она при запуске проверяет версию программы и моя ей не понравилась:(
Так вот, при загруженом SIce(2.6 ) инсталяшка не запускается:( Вываливается SIce и говорит: Break due to UnhandledExeption NTSTATUS=STATUS_ACCESS_VIOTATION, в окне кода INVALID:(
Давлю F5 - вылетает Break due to UnhandledExeption NTSTATUS=STATUS_OVERFLOW, потом опять Break due to UnhandledExeption NTSTATUS=STATUS_ACCESS_VIOTATION и прога завершается:(
Как от этого избавися?
Без загруженно SIce прога запускается нормально!
WinXP SP1
Заранее благодарен!



Вопрос отправлен: 18.06.2003, 07:54
Отправитель: nix (nix@pisem.net)

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

Отвечает masquer

Добрый день, nix!
Ну тут такие варианты могут быть - прога определила что активен отладцик и, чтобы не привлекать внимание, вываливается по эксепшену. Или, возможен варант BrokenSword-a. Смотри в отладчике лучше.

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


Отвечает Broken Sword

Добрый день, nix!
дело в том, что когда сайс активен, инструкция INT 3h является первой инструкцией в API-функции UnhaltedExceptionFilter. Именно поэтому сайс и вылетает. А почему возникает UnhaltedExceptionFilter - почитай у Мэтта Питрека в его Crash Course... SEH

Ответ отправлен: 18.06.2003, 10:39
Отправитель: Broken Sword


Отвечает Lynx

Добрый день, nix!
Я конечно не большой ас в SI (Да и вобще не люблю отладчики), но может быть прога просто обнаруживает отладчик и не хочет запускаться???


Ответ отправлен: 18.06.2003, 16:41
Отправитель: Lynx


 Вопрос № 3503

Здравствуйте, Эксперты!
Только начал изучать Assembler. Выбрал MASM но возникли вопросы.
1. Есть ли разница между MASM и MASM32 ?
2. Почему MASM32 v.8 не компилит файл выводящий "Hello World" из рассылки Калашникова (MASM32 брал с wasm.ru)
3. Сейчас стоит MASM 6.13 все нормально, но может ли он компилить WIN32 программы?



Вопрос отправлен: 18.06.2003, 08:04
Отправитель: Mikhail

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

Отвечает _vt

Здравствуйте, Mikhail!
1) MASM32 - это пакет, разработанный не Microsoft, но он основан на MASM (MASM32v8 основан на MASM 6.14, существует также обновление до 6.15).
2) Потому что линкер link.exe, начиная с версии 6.14 не собирает DOS-программы. Для их сборки надо брать более ранний link.exe.
3) Именно для них он и предназначен.

---===*** E-Man 1.2 - Powerful toy***===---


Ответ отправлен: 18.06.2003, 09:34
Отправитель: _vt


Отвечает Bob Johnson

Здравствуйте, Mikhail!
MASM32 - это для 32-разрядных программ. Для ДОСа (т.е. 16-разрядных) надо использовать MASM.
3. Видимо нет.

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 18.06.2003, 17:40
Отправитель: Bob Johnson


Отвечает Hangatyr

Приветствую Вас, Mikhail!
Собственно, разница в том и есть, что masm32 - для создания win32-приложений. Если хочешь писать на асме, то скачай и его.

Ответ отправлен: 18.06.2003, 08:30
Отправитель: Hangatyr


Отвечает Pin

Доброе время суток, Mikhail!
1. MASM32 - 32x битный, MASM - 16.
2. Используте MASM
3. Только MASM32

Ответ отправлен: 19.06.2003, 00:52
Отправитель: Pin


 Вопрос № 3505

Привет, Xперты!
Есть программа на C++. Я написал другую (тоже на C++) теперь мне надо сделать так, чтобы при запуске первой сначала выполнялась моя прога. Опыта программирования на ассемблере нет.



Вопрос отправлен: 18.06.2003, 09:56
Отправитель: ФВ

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

Отвечает vitya

Доброе время суток, ФВ!
На самом деле не совсем ясно зачем тебе в данном случае ассемблер.
1. если у тебя windows, то работа очень проста
HANDLE h = CreateProcess();
WaitForSingleObject(h, INFINITE);
2. под дос используй функции exec... из process.h. Выбери какая именно тебе нужна и вперед.


Ответ отправлен: 18.06.2003, 10:08
Отправитель: vitya


Отвечает Hayk

Добрый день, ФВ!
Ааа, значит исходники этой программы у тебя есть. Ну сразу скажу, что при запуске первой программы его процесс буден ИНИРОВАН раньше чем процесс твоей программы в любой реализации. Можно прямо в main или WinMain первой программы записать код который запускает твою программу (и)/(или не) ждёт её завершерия...тут ассемблер ни при чём ... это легко реализуеться при помощи win32api примерно так...
main()
{
HANDLE hProc = CreateProcess( "твоя программа.exe" , .. ) ;
WaitForSingleObject( hProc , INFINITE ) ;
CloseHandle( hProc ) ;
......
return 0 ;
}

Ответ отправлен: 18.06.2003, 10:44
Отправитель: Hayk


Отвечает Hangatyr

Здравствуйте, ФВ!
Хм... а исходники программы есть? Если да, то причем здесь асм? Вставляй, что угодно и компиль.
Если все же исходников нет, то без асма, пожалуй, будет сложновато - придется создать новую секцию (соответственно, добавить ее таблицу, править заголовок), затем разобраться с импортами, данными и т.д. Изменить точку входа программы, сохранить старую, чтобы потом возвратить управление. Короче, проблем достаточно много, но они решаемы.


Ответ отправлен: 19.06.2003, 14:00
Отправитель: Hangatyr


 Вопрос № 3506

Всем привет!
Нашел в VS 7.0 NET новые версии файлов ml и link:
ml - Macro Assembler Version 7.00.9466
link - MicrosoftR Incremental Linker 7.0.9466.0
Требуют 2 dll-ки из этого пакета - mspdb70.dll и msvcr70.dll
Попробовал ими скомпилить прогу из одной строки - cpuid.
был до этого 1536 байт, перекомпиленные 2048.
Мелкософт поизголялся. выравнивание что-ли другое стало?
Не пойму в чем прикол. Код не изменился вроде, нулей стало меньше, значит выравнивание?
Как бы вы это объснили?


Приложение:


Вопрос отправлен: 18.06.2003, 11:47
Отправитель: [-=TT=-] (KunaevNA@PosolskyDom.ru)

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

Отвечает masquer

Доброе время суток, [-=TT=-]!
Ага есть, такое. Я тоже побаловался - увидел, что там опции изменены. Уже не помню как, но можно выравнивание настроить. Смотри по опциям линкера. Я его снес и перешел назад на линкер от 6-й студии, т.к. там отладочная информация вменяемая. В 7-й формат pdb изменен.

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


Отвечает Bob Johnson

Добрый день, [-=TT=-]!
Чтобы найти ответ на этот вопрос, просто посмотри таблицу секций этого файла. Оттуда ты узнаешь, какая секция стала больше или где было изменено выравнивание. Таблицу секций можно посмотреть с помощью exescope.

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 18.06.2003, 17:40
Отправитель: Bob Johnson


 Вопрос № 3507

Уважаемые эксперты! Помогите подключить USB принтер так, что-бы он печатал под досом или в эмуляции доса под мастдаем. Принтер Lexmark. Заранее благодарен.



Вопрос отправлен: 18.06.2003, 12:03
Отправитель: Сергей

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

Отвечает Bob Johnson

Доброе время суток, Сергей!
В эмуляции доса он и так должен печатать. Если у тебя 9х, то там есть настройка портов принтера, т.е. lpt1 может для программ доса указывать на какой-либо сетевой принтер.

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 18.06.2003, 17:40
Отправитель: Bob Johnson


 Вопрос № 3508

Уважаемые экперты, у меня вопрос. Есть локальная сеть, естьь программа Chat-для локальной сети как программа установленная на разных компьютерах видит свою копию, и может передавать сообщения не ошибаясь!!! Есло можно напишите какие функции или DLL Win ответсвенны за это!!!



Вопрос отправлен: 18.06.2003, 13:33
Отправитель: Ujin (twixt@rambler.ru)

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

Отвечает St

Привет, Ujin!
Самое простое для создания мессенджера в локалке - создание Mailslot и запись/чтение в/из него. Это есть в Win32 API help/MSDN. Я писал такую программу, если не будет понятно пишите.
St

Ответ отправлен: 18.06.2003, 17:39
Отправитель: St


Отвечает Bob Johnson

Добрый день, Ujin!
За ошибки несет ответственность WSA (Win Socket), все сокеты созданные с флагом SOCK_STREAM уже сами обеспечивают безошибочную передачу данных.
По вопросу, как прога видит себя на других компьютерах - один из вариантов: при запуске прога рассылает broadcast пакет, который ловят остальные компы в сети и регистрируют, что запущен новый экземпляр программы. В ответ они отсылают тому компу подтверждение, что здесь тоже есть такая программа, чтобы он знал об этом.

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 18.06.2003, 17:40
Отправитель: Bob Johnson


Отвечает Ramzes

Здравствуйте, Ujin!
Функции тут не причем...
К примеру может быть так
Программа ставит сикет на какой-то конкретный порт, и при посылает сообщение на этот порт другого компа. Если проходит внятный ответ, то там есть такая же прога.

Ответ отправлен: 18.06.2003, 17:10
Отправитель: Ramzes


Отвечает Lynx

Добрый день, Ujin!
Если объяснить попроще, то все копии этой программы используют одни и те же порты. (Порт - это виртуальный канал связи, по которому передаётся инфа. Скажем если ты забираешь почту, то то зачастую твой почтовый клиент соединяется с сервером по 110 порту, а сервер уже посылает тебе в этот порт письма.) Так, вот: если прога запущена, то она открывает этот порт (пусть он имеет номер 666). Прога с другого компа соединяется с твоим компом и проверяет 666-й порт, если он открыт (соединение прошло успешно), то значит на твоём компе эта прога готова к приёму сообщений и можно писать. Именно поэтому ты можешь качать страничку из сети и забирать почту одновременно. Почтовый клиент принимает 110-й порт, а Веб Браузер 80-й.

Ответ отправлен: 18.06.2003, 17:07
Отправитель: Lynx


Отвечает Hayk

Приветствую Вас, Ujin!
1. Программа посылает broadcast UDP пакеты в сети. Другие всегда должны прослушивать сеть на наличие этих пакетов по фиксированному порту. Все отвечают отправителю.
2. Отправитель создаёт листинг вех ответивших станций в локалке и нотом с каждым из них создаёт TCP connection ипередаёт сообщения не ошибаясь.
Нет нельзя , сам пробуй...

Ответ отправлен: 19.06.2003, 10:04
Отправитель: Hayk


 Вопрос № 3509

Привет
Я использую в программе (Win32) отдельный поток который создает задержку от 10 мс и больше (GetTickCount, Sleep 1, GetTickCount, если прошло 10 мс то код сдвига экрана на пиксел и иже с ним). В Win98 при использовании задержки 10 мс получается скорость 90 кадров/с (должна быть 99-100), 11 мс - 70 кадров/с (а должно быть 1000/11=90), и тд (скорость не соответствуют задержкам пока не будет достаточно низкой скорости, причем некоторые задержки в пределах 2-4 мс не дают изменения скорости). В Win2000 и XP ситуация значительно хуже - 10 мс - 99 кадров/с; 11 мс - 50 кадров/с (и при следующих задержках чуть ли не до 16-20 мс скорость остается 50 кадров/с).
C чем это может быть связано? Какая в Windows частота переключения между задачами/потоками?
St



Вопрос отправлен: 18.06.2003, 14:10
Отправитель: St (st23@yandex.ru)

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

Отвечает baldr

Приветствую Вас, St!
Винда - это система не реального времени, поэтому там нельзя четко задать определенный интервал времени.

Ответ отправлен: 18.06.2003, 15:51
Отправитель: baldr


Отвечает masquer

Доброе время суток, St!
Ну дык от приоритета еще может зависеть, поставь потоку принудительно RealTime приоритет, тогда смотри.

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


Отвечает Bob Johnson

Здравствуйте, St!
На Win XP GetTickCount имеет разрешение 64 раза в секунду. Т.е. увеличение значения результата, возвращаемого этой ф-й происходит 64 раза в секунду (ну и не по 1, а сразу на 1000/64). Если тебе нужна бОльшая точность - используй timeGetTime и QueryPerformanceCounter. Первую можно настроить немного по точности, а вторая имеет наибольшую точность из всех функций - частота ее изменения - 1,5 - 3 МГц (завист от типа чипсета). Реальную точность не знаю.
Ну и самый последний вариант - использовать cpuid, точнее которой уже ничего и нет.

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 18.06.2003, 17:40
Отправитель: Bob Johnson


Отвечает Hayk

Доброе время суток, St!
Windows-ы не RealTime операционные системы. Указание времени засыпания потока не значит что система передаст управление точно через это время. Оно сделает это после истечении заданного промежутка времени , но когда ей вздумаеться. Попробуй использовать WaitableTimers. Они точнее работают.

Ответ отправлен: 19.06.2003, 09:58
Отправитель: Hayk


 Вопрос № 3510

Уважаемые эксперты при изучение asm столкнулся с проблемой назначения регистров. Сейчас разбираю регистр CX.
Написано что он счётчик.
Эквивалентин ли этот код коду в приложении.
MOV AH,09
MOV AL,'*'
MOV BH,00
MOV BL,0DAH
MOV CX,05 ;типа количество повторений
INT 10H
И если можно, то обьясните на пальчах назначение используемых регистров.


Приложение:


Вопрос отправлен: 18.06.2003, 16:28
Отправитель: Ujin (twixt@rambler.ru)

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

Отвечает Dark_Lord

Здравствуйте, Ujin!
ax - акселератор, многие команды с его использованием выполняются быстрее
bx - сегмент базы
cx - счётчик, для таких команд как loop
dx - регистр информации
di - destination index (для stosb/scasb/movsb/cmpsb)
si - source index (lodsb/cmpsb/movsb)
bp - base position (для создания стковых кадров)
sp - stack position
cs - code segment
ds - data segment
ss - stack segment
...

Ответ отправлен: 18.06.2003, 18:30
Отправитель: Dark_Lord


Отвечает Ayl

Добрый день, Ujin!
Почти... Пример на асме эквивалентен такому куску: print"*****". В твоем примере есть цикл, соответственно, эти два куска не эквивалентны - на асме цикла нет.
Насчет регистров. Они могут использоваться как угодно программисту до тех пор, пока он не вызывает сторонние подпрограммы, типа как у тебя в примере прерывание VideoBIOS. Тогда надо смотреть описание этой процедуры и устанавливать регистры согласно этому описанию.
Кроме этого, на использование регистров накладываются некоторые ограничения:
1. В команде LOOP, а также при использовании префиксов повторения (REP, REPE и REPNE) неявно подразумевается регистр CX в качестве счетчика повторений.
2. В командах работы со строками (LODS, STOS, MOVS, SCAS, CMPS) исходная строка идентифицируется регистрами DS:SI, а строка результата - ES:DI. При этом при выполнении этих команд регистры SI и DI автоматически изменяются в зависимости от размера операнда и установки флага DF.
3. В 16-разрядной режиме в качестве регистров для косвенной адресации могут использоваться только регистры BX, BP, SI и DI, причем вместе только такие пары: BX+SI, BX+DI, BP+SI и BP+DI.
4. Только регистр DX может использоваться в качестве указателя порта для команд IN и OUT.
5. В командах MUL, IMUL, DIV и IDIV один из операндов - это либо регистр AL, AX, либо регистровая пара DX:AX.
6. Команды без операндов (AAA, AAD, AAS и т.п.) в качестве неявного операнда используют регистр AL или AX.
Ну в общем, пока тебе этого хватит...

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


Отвечает Zedr0n

Доброе время суток, Ujin!
Не совсем эквивалентен. Но для указанной цели подходит. Стандартный аттрибут для вывода на экран, и в Перле тоже - 07h.
Насчет использования регистра CX, он часто используется в качестве счетчика, например, в команде loop или в строковых командах rep cmpsb, rep stosb, rep movsb...


Ответ отправлен: 19.06.2003, 11:12
Отправитель: Zedr0n


Отвечает masquer

Здравствуйте, Ujin!
А кто процессору будет указывать, чего считать? Вот если написать что-то типа
mov eax, 5
@@:
xor eax, eax
loop @B
тогда уже понятней становится. А вообще в качестве счетчика любой регистр можно использовать - не всех правил можно придерживаться, особенно в асме.

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


Отвечает Lynx

Здравствуйте, Ujin!
Да. CX - это регистр - счётчик, но только для циклов. А если у иебя нет цикла, то ему и считать нечего. В твоём случае надо делать так:
MOV AH,09
MOV AL,'*'
MOV BH,00
MOV BL,0DAH
MOV CX,05 ;типа количество повторений
Repeat:
INT 10H
Loop Repeat
---------------
Loop Repeat делает две вещи:
1. Уменьшает cx на 1.
2. Проверяет (cx = 0) если равен, то управление передаётся следущей за loop команде, а если нет, то управление предаётся указаной метке (В данном случае Repeat).


Ответ отправлен: 18.06.2003, 17:07
Отправитель: Lynx


Отвечает Tigran K. Kalaidjian

Доброе время суток, Ujin!
Вроде всё правильно. На самом деле названия регистров довольно условны, например, СX можно использовать не только как счётчик, но и как некоторое место для хранения промежуточных данных или для храниения адресов и т.д.
Кратко о назначении:
Регистры общего назначения - EAX, EBX, ECX, EDX
Регистры сегментов - это CS, DS, ES, FS, GS, SS
Регистры оффсета - EIP, ESP, EBP, ESI, EDI.
Регистры управления - CR0, CR1, CR2, CR3
Регистры дебаггера - DR0, DR1, DR2, DR3, DR4, DR5, DR6, DR7
Контрольные регистры - TR6, TR7
Регистр командного указателя - IP
Подробное описание ушло на мыло.

Ответ отправлен: 18.06.2003, 22:40
Отправитель: Tigran K. Kalaidjian


Отвечает Bob Johnson

Приветствую Вас, Ujin!
Назначение регистров определяешь именно ты, а не кто-то другой (кроме стека). Различия в твоем случае могут быть только такие: команда loop _метка_ неявно использует регистр cx, поэтому его принято считать счетчиком. В 32-разрядном программировании обычно loop не используется, поэтому особой разницы в назначении регистров нет:
mov cx, 10
m1:
...
loop m1
даст цикл из 10 раз и
mov dx, 10
m2:
...
dec dx
jnz m2
дасть цикл из 10 раз, только первый вариант использует cx, а второй dx.

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 19.06.2003, 02:34
Отправитель: Bob Johnson


 Вопрос № 3511

Уважаемые эксперты!
Подскажите пожалуйста, какие поля в структуре OPENFILENAME являются обязательными для заполнения. Дело в том, что при вызове GetOpenFileName() диалог не создается, полагаю, что это происходит из-за того, что нужно в обязательном порядке заполнять какие-то поля структуры OPENFILENAME, хотя может на это есть и другие причины. Буду очень благодарен за рассказ о возможных "подводных камных" данной функции.
Заранее спасибо!



Вопрос отправлен: 18.06.2003, 17:03
Отправитель: Konstantin

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

Отвечает masquer

Здравствуйте, Konstantin!
Никаких подводных камней там нет. Вот как я это делаю.
mov ofn.lStructSize,SIZEOF ofn
push hWd
pop ofn.hWndOwner
push hInstance
pop ofn.hInstance
mov ofn.lpstrFilter, offset FilterString
mov ofn.lpstrFile, offset buf_V
mov ofn.nMaxFile,512
mov ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_HIDEREADONLY
mov ofn.lpstrTitle, offset ofnTitle
invoke GetOpenFileName, ADDR ofn
test eax, eax
jz @@error


Ответ отправлен: 18.06.2003, 17:34
Отправитель: masquer


Отвечает St

Привет, Konstantin!
Я использовал следующий код (См Приложение)
St

Приложение:

Ответ отправлен: 18.06.2003, 17:53
Отправитель: St


Отвечает Илья

Добрый день, Konstantin!


Вот то, что я заполнял:


OPENFILENAME ofn;


ofn.lStructSize =sizeof (OPENFILENAME);
ofn.hwndOwner = 0;
ofn.hInstance = 0;
ofn.lpstrFilter = szFilter;
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0L;
ofn.nFilterIndex = 1L;
ofn.lpstrFile = szFileName;
ofn.nMaxFile = 256;
ofn.lpstrFileTitle = szFileTitle;
ofn.nMaxFileTitle = 16;
ofn.lpstrInitialDir = szDirName;
ofn.lpstrTitle = "Attach";
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;


Сорри, что не на асм, надеюсь перевести будет не проблема. А будут проблемы - ну ты знаешь где спросить :)

-=илья=-


Ответ отправлен: 18.06.2003, 21:58
Отправитель: Илья


Отвечает Bob Johnson

Доброе время суток, Konstantin!
Вот пример заполнения структуры (только для С++):
OPENFILENAME of = {sizeof (OPENFILENAME), 0, 0,
"All files (*.*)*.*",
0, 0, 0, 0, 256,
0, 0, 0, "Выберите файл",
OFN_FILEMUSTEXIST | OFN_HIDEREADONLY,
0, 0, 0, 0, 0, 0};
К этому добавляется инициализация of.hwndOwner, of.lpstrFile = (char*)GlobalAlloc (GMEM_FIXED | GMEM_ZEROINIT, 256); of.nMaxFile = 256, of.hInstance. После этого функция вызывается нормально и окно показывается.

* EMan1.4: ---===*** Have your friend the way you would like him to have you ***===---


Ответ отправлен: 19.06.2003, 02:34
Отправитель: Bob Johnson


Отвечает Hayk

Приветствую Вас, Konstantin!
пример из MSDN-a
OpenFileName.lStructSize = sizeof(OPENFILENAME);
OpenFileName.hwndOwner = hWnd;
OpenFileName.hInstance = hCurrApplicationInstance;
OpenFileName.lpstrFilter = NULL;
OpenFileName.lpstrCustomFilter = NULL;
OpenFileName.nMaxCustFilter = 0;
OpenFileName.nFilterIndex = 0;
OpenFileName.lpstrFile = szFile;
OpenFileName.nMaxFile = sizeof(szFile);
OpenFileName.lpstrFileTitle = NULL;
OpenFileName.nMaxFileTitle = 0;
OpenFileName.lpstrInitialDir = NULL;
OpenFileName.lpstrTitle = "Open a File";
OpenFileName.nFileOffset = 0;
OpenFileName.nFileExtension = 0;
OpenFileName.lpstrDefExt = NULL;
OpenFileName.lCustData = (LPARAM)&sSomeDataToSendToHook;
OpenFileName.lpfnHook = HookProc;
OpenFileName.lpTemplateName = NULL ;
OpenFileName.Flags = OFN_SHOWHELP | OFN_EXPLORER | OFN_ENABLEHOOK ;


Ответ отправлен: 19.06.2003, 09:48
Отправитель: Hayk



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

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

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

Ваше имя:

Ваш e-mail:

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


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

Ваш вопрос:


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


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


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

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

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




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование


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


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

В избранное