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

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


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

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

Выпуск № 451
от 23.12.2002, 16:10

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


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

Bob Johnson
Статус: Профессиональный
Общий рейтинг: 152.19
[Подробней >>]
masquer
Статус: Профессиональный
Общий рейтинг: 148.53
[Подробней >>]
Traish
Статус: Доверительный
Общий рейтинг: 130.14
[Подробней >>]
 
St
Статус: Опытный
Общий рейтинг: 114.88
[Подробней >>]
Maverick
Статус: Профессиональный
Общий рейтинг: 139.56
URL: Задачи по ассемблеру
Телефон: 89039415024 (BeeLine GSM)
[Подробней >>]
igorash
Статус: Профессиональный
Общий рейтинг: 114.95
Телефон: 8(903)251-86-01
[Подробней >>]
 
Eugene
Статус: Опытный
Общий рейтинг: 108.61
URL: мощный файловый архив
[Подробней >>]
Broken Sword
Статус: Профессиональный
Общий рейтинг: 127.71
URL: моя рассылка по Protected Mode
[Подробней >>]
Gibbel
Статус: Профессиональный
Общий рейтинг: 108.41
URL: Страничка обо мне и моих друзьях
[Подробней >>]
 
Александр
Статус: Доверительный
Общий рейтинг: 113.07
[Подробней >>]
ASMодей
Статус: Профессиональный
Общий рейтинг: 119
[Подробней >>]


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

Вопрос № 2189. Слушай ну ты приколист! А ты далеко живешь?, а то бы пивка с тобой дернули. И все же может ты DX7 и ... (ответов: 1)
Вопрос № 2190. Здравствуйте, Меня интересует как к готовой проге прицепить Dll, и запускать ее оттуда(из проги)?Воо... (ответов: 4)
Вопрос № 2191. Нет, не в начало. Как именно мне поступить? Да, добавить просто код в программу было бы лучше чем по... (ответов: 1)
Вопрос № 2193. [здрствйт вжм кспрт] Поясняю свой вопр. Ну не знает ли кто чего там с кодством видеоадаптеров,etc. в... (ответов: 3)
Вопрос № 2194. Уважаемые эксперты, нет ли у кого хороший доков по описанию прерывания int 1, а то мне самому нужно ... (ответов: 3)
Вопрос № 2195. Помогите плз написать прогу на асм'е: резидентная программа, которая будет отлавливать нажатие alt-c... (ответов: 1)
Вопрос № 2197. Уважаемые эксперты! Заранее извините, если такой вопрос уже был. Под windows2000 не хотят загружатьс... (ответов: 4)
Вопрос № 2198. Просьба к Maverick Пришли, пожалуйста, исходник чернобыля. Заранее благодарен, rams.... (ответов: 2)
Вопрос № 2199. Здравствуйте Bob Johnson! Чижик-пыжик на дисководе ?! Буду рад если пришлешь мне. Адрес: tepex at ho... (ответов: 1)
Вопрос № 2201. Здравствуйте. Вопрос по расылке №19 ""Ассемблер? Это просто! ...". В процедуре устано... (ответов: 5)

Вопросов: 10, ответов: 25


 Вопрос № 2189

Слушай ну ты приколист!
А ты далеко живешь?, а то бы пивка с тобой дернули.
И все же может ты DX7 и DX8 путаешь в 7-ом все, что хочешь рисовать
можно а на 8-ом нет понятия даже переднего и заднего буфера
(Все через Device происходит).
Потому что Microsoft (как и производители Harda) не хотят,
что бы програмисты на прямую могли баловаться с поверхностями,
вообщем может и можно рисовать на текстурах, так только через шейдеры
(про них ни чего сказать не могу) а Rener хоть какой ставь, только
если нет функций типа DirectDrawSurface7::DrawLine (x1,y1,x2,y2), то
ты никак линию не нарисуешь.
Ну да ладно я вчера DirectX 9.0 (Beta 1) закачал так там библиотеки под
Net студию есть. Только вот они ни хрена к проекту не цепляются.
А ты Net еше не пробовал юзать?
Ладно давай гудбай.



Вопрос отправлен: 18.12.2002, 16:19
Отправитель: Nimnul (Nimnul@atrus.ru)

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

Отвечает Bob Johnson

Доброе время суток, Nimnul!
> А ты далеко живешь?, а то бы пивка с тобой дернули.
Не очень. Город Калуга, 180 км от Москвы.
> И все же может ты DX7 и DX8 путаешь
Не могу путать, потому что с 7 вообще не знаком.
> 8-ом нет понятия даже переднего и заднего буфера
Бросай, бросай курить... Когда ты создаешь девайс (IDirect3D8::CreateDevice) там есть ссылочка на структурку D3DPRESENT_PARAMETERS, в которой есть членs BackBufferCount, BackBufferFormat и т.д.
> могли баловаться с поверхностями,
вообщем может и можно рисовать на текстурах, так только через шейдеры
Вот снова говорю - конопля - это яд. Фунции рисования линии в таком виде, как ты написал нет. И не должно быть. Это все-таки Direct 3D а не Windows GDI. Чтобы нарисовать именно линию, необходимо вызвать IDirect3DDevice8::SetRenderState (D3DRS_FILLMODE, D3DFILL_WIREFRAME), после чего вместо треугольников тебе будут рисоваться линии (точнее - каркас). Можно даже точки заставить рисовать (причем, потом наложить на них текстуру!) А рисовать - стандартно: IDirect3DDevice8::DrawPrimitive и все такое.
Далее, если уж тебе захочется самому нарисовать что-то там, то указывай D3DPRESENTFLAG_LOCKABLE_BACKBUFFER - тогда сможешь и руками рисовать все, что захочешь. (но это, говорят, приводит к падению производительности, что неудивительно).
Про DX9 и .net ничего сказать не могу. Желания ставить С# пока нет. Возможно, оно вообще не будет работать без internet. Я не сторонник устанавливать все самое последнее (хотя, по словам знающих людей DirectX8 стал значительно проще, чем 7 - поэтому поставил себе DXSDK сразу, как только достал). И вот тебе советую - поставь DXSDK - там много примеров. В частности, для 3Д - там есть и зеркальное отражение летающего самолета в чайнике (Cube Env Mapping + Rendering into Textures - то что тебе нужно).


Ответ отправлен: 19.12.2002, 22:11
Отправитель: Bob Johnson


 Вопрос № 2190

Здравствуйте,
Меня интересует как к готовой проге прицепить Dll, и запускать ее оттуда(из проги)?Вообще мне нужно дописать байт 200 кода, но места нет в проге.Всмысле она уже скомпилирована.
Извените если вопрос глупый.



Вопрос отправлен: 18.12.2002, 16:59
Отправитель: XShocK (xshock@exnet.kg)

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

Отвечает masquer

Добрый день, XShocK!
Вопрос не глупый. Во-первых, чтобы прицепить к программе библиотеку, необходимо править таблицу импорта (как это сделать, смотри формат РЕ). Дальше, если в секции кода места нет, создавай новую секцию, присвой ей только характеристики правильные (executabe, readable, etc). По вопросу непонятно, будет ли твой код первым получать управление, иначе патчить код оригинала прийдется, если первым, то OEP где-то запоминать нужно, чтобы вернуть управление оригиналу. Вкратце так...

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


Отвечает Traish

Добрый день, XShocK!
Тут просто так ничего не получится. Библиотеки загружаются функцией LoadLibrary. Если ты говоришь, что прога уже скомпилирована, то это тебе ничем не поможет. А добавить код в программу можно и без всяких библиотек - правишь PE - заголовок и дописываешь свой код. Так многие вирусы действуют.


Ответ отправлен: 18.12.2002, 17:25
Отправитель: Traish


Отвечает St

Привет, XShocK!
Обычно это делают загружая DLL с помощью LoadLibrary(Ex) и получением адреса функции с GetProcAddress (плюс название файла и название (или номер) функции в сегменте данных). Однако вам сначала нужно узнать использовались ли в в данной программе эти функции, тогда можно попытаться подключить свою функцию, в противном случае не знаю можно ли.
St

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


Отвечает Maverick

Здравствуйте, XShocK!
Насчет dll тебе уже наверное ответили, а почему бы не дизасмить прогу и не дописать то, что тебе надо.


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


 Вопрос № 2191

Нет, не в начало. Как именно мне поступить? Да, добавить просто код в программу было бы лучше чем подключать библиотеку. если не трудно можно поподробнее обьяснить как создать новую секцию? Мне нужно чтобы запускался этот код при какихто действиях программы.



Вопрос отправлен: 18.12.2002, 18:33
Отправитель: XShocK (xshock@exnet.kg)

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

Отвечает masquer

Приветствую Вас, XShocK!
Для начала совет - бери описание формата РЕ, иначе мне слишком долго объяснять прийдется, и все равно не понятно будет.
В общем, смотришь внимательно на свой код, если ему нужна таблица импорта, отличная от оригинала, то прийдется вручную дописывать к импорту оригинала отсутствующие функции. Дальше в файле создаешь новую секцию в файле по смещению кратному File Alignment, указанному в заголовке по смещению +3Ch, дальше смотришь на какой виртуальный адрес посадить твой код, для этого просматриваешь все секции и там где будет последняя, смотришь ее виртуальный адрес, прибавляешь ее же виртуальный размер и получаешь свой виртуальный адрес.
Это все только пол-дела. Резюме - изучай формат РЕ, без него я тебе помочь не смогу...

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


 Вопрос № 2193

[здрствйт вжм кспрт]
Поясняю свой вопр. Ну не знает ли кто чего там с кодством видеоадаптеров,etc. в наше 32-разрядное время с его технологиями(svga, или что у нас сейчас на дворе, графические процессоры...)?
В iНете все на english, а хуже того еще и на СиСи++!
[д свдн]



Вопрос отправлен: 18.12.2002, 19:16
Отправитель: DyC (dyc@nm.ru)

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

Отвечает Bob Johnson

Приветствую Вас, DyC!
Ну а что тебе хочется? На русском ассемблере, да еще чтобы тебе деньги давали за то, что ты это читал??? Ты уж учи с++. Почитать рекомендую (как, в прочем, и всем остальным, кто уже спрашивал) - DirectX 8 SDK. Там тоже все на english + C++, но зато есть примеры.


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


Отвечает igorash

Доброе время суток, DyC!
Есть такой стандарт как VESA, вот под него и пиши... или если в винде, то пиши для directx или opengl, а сишные примеры разбирай и переводи на асм, все равно там одни вызовы функций из длл ;)

Ответ отправлен: 18.12.2002, 19:39
Отправитель: igorash


Отвечает Eugene

Приветствую Вас, DyC!
Если уж чего-то хочешь писать профессионально, то придётся изучить английский язык. А язык С++ ничем особо от других языков высокого уровня не отличается. Тем более, что на нём довольно понятно, как выглядит код на асме. На делфи по-моему менее понятно.

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


 Вопрос № 2194

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



Вопрос отправлен: 18.12.2002, 20:59
Отправитель: Vladimir (petrov_v@list.ru)

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

Отвечает Traish

Доброе время суток, Vladimir!
Как может работать исключение #DB? Так же как и любое другое. Процессор может генерировать его по разным причинам - пошаговый режим (флаг TF), бряк на адрес в DRn, переключение задачи и т.д. Оно не получает кода ошибки. Сохраняются CS и EIP инструкции, вызвавшей исключение или следующей за ней (зависит от класса исключения). Все это довольно подробно описано в интеловской документации, которую некоторое время назад можно было заказать, сейчас -не знаю, кажется, что нельзя. Но она доступна в электронном виде (а конкретно - в виде мерзопакостного PDF-файла).
http://developer.intel.ru/download/design/mobile/MANUALS/

Ответ отправлен: 19.12.2002, 12:47
Отправитель: Traish


Отвечает Broken Sword

Приветствую Вас, Vladimir!
А чего тут описывать? Если флаг TF стоит, то int 1 генерируется аппаратно после каждой выполненной инструкции
Генерируется также при использовании отладочных регистров:
- при исполнении инструкции по заданному адресу
- при чтении/записи данных по заданному адресу
- при обращении к заданным портам в/в
- при переключении задач (если станет TF)
- при исполнении INT1
Используется отладчиками. При вызове в стеке сохраняются CS и EIP инструкции, вызвавшей прерывание (кроме случая с генерацией при исполнении инструкции - здесь в стек кладется адрес СЛЕДУЮЩЕЙ инструкции). Этого вполне достаточно, чтобы после передачи управления отладчику (делаешь что угодно) вернуться в программу.

Ответ отправлен: 19.12.2002, 18:50
Отправитель: Broken Sword


Отвечает Maverick

Добрый день, Vladimir!
Кое что есть, но в TechHelp описано лучше, погляди там.

Приложение:

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


 Вопрос № 2195

Помогите плз написать прогу на асм'е:
резидентная программа, которая будет отлавливать нажатие alt-ctrl-del и осуществлять блокировку рабочей станции до ввода пользователем пароля. Пароль сохранять (и изменять) как переменную окружения (см. команду set). Если соответствующая переменная (например, passwd) не определена, паролем считать пустую строку
Буду премного благодарен тому кто поможет.



Вопрос отправлен: 18.12.2002, 22:00
Отправитель: Hammer

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

Отвечает Bob Johnson

Приветствую Вас, Hammer!
Тебе надо вешаться на прерывание 9 (как я понимаю, речь идет про ДОС), потому что оно позволит перехватить ctrl-alt-del. В его обработчике необходимо анализировать scan-codы, которые поступают от клавиатуры (in al, 60h в обработчике прерывания) и запоминать их. Потом обычно ты должен будешь вызвать старый обработчик, если только не отловил последнюю из 3 клавиш (иначе произойдет стандартная реакция на эти кнопки). Когда же будет вызвана именно эта комбинация - сбросишь контроллер клавиатуры и прерываний (см. вопрос № 2150 - там в вопросе это есть), после чего перейдешь в свой кусок программы, который будет использовать твой же обработчик 9 прерывания (вот тут старый вызывать не надо) для ввода пароля. Придется использовать scan-codы.


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


 Вопрос № 2197

Уважаемые эксперты!
Заранее извините, если такой вопрос уже был.
Под windows2000 не хотят загружаться DLL-ки, сделанные на Масме. Под win98 все работает.
Как (или чем) можно откомпилировать DLL-ки, чтобы они работали под w2k?
Пользуюсь пакетом masm32v7.
Заранее благодарен.



Вопрос отправлен: 18.12.2002, 23:54
Отправитель: rust_br (rust_br@rambler.ru)

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

Отвечает Bob Johnson

Доброе время суток, rust_br!
Как это не хотят??? Где они у тебя находятся, что конкретно значит "не хотят" - какая ошибка возникает. Проверь дизассемблером список экспортируемых функций.


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


Отвечает Traish

Доброе время суток, rust_br!
Все должно нормально грузится, иначе бы программы написанные под Win9x в w2k не работали бы. Я написал для проверки простейшую библиотеку - работает и в Win98, и в w2k. Код свой проверяй.


Ответ отправлен: 19.12.2002, 12:52
Отправитель: Traish


Отвечает Gibbel

Доброе время суток, rust_br!
Вероятно, ты что-то не так делаешь в самой DLLке... Кинь исходник, скажу где что не так...

Ответ отправлен: 19.12.2002, 10:40
Отправитель: Gibbel


Отвечает masquer

Здравствуйте, rust_br!
Исходник в студию. У меня все длл работают как в 98, так и в 2к. Следи за предохранением регистров.

Ответ отправлен: 19.12.2002, 10:42
Отправитель: masquer


 Вопрос № 2198

Просьба к Maverick
Пришли, пожалуйста, исходник чернобыля.
Заранее благодарен, rams.



Вопрос отправлен: 19.12.2002, 09:37
Отправитель: rams (gultso5@belovo.net.ru)

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

Отвечает Traish

Здравствуйте, rams!
Если уж ты отправил этот вопрос всем экспертам, я тебе тоже вышлю этот исходник.


Ответ отправлен: 19.12.2002, 12:20
Отправитель: Traish


Отвечает Maverick

Добрый день, rams!
Я же вроде тебе слал, или не тебе.
Я уж со счета сбился от заказов, зачем он вам ? :)
Лови!


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


 Вопрос № 2199

Здравствуйте Bob Johnson!
Чижик-пыжик на дисководе ?! Буду рад если пришлешь мне.
Адрес: tepex at hotbox.ru



Вопрос отправлен: 19.12.2002, 13:38
Отправитель: Tepex

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

Отвечает Bob Johnson

Доброе время суток, Tepex!
Да я бы и сам рад теперь его найти... Но боюсь, что уже файла такого нет. Он был около 600 байт, com, кажется. Хотя вот нашел. Так что высылаю.


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


 Вопрос № 2201

Здравствуйте.
Вопрос по расылке №19 ""Ассемблер? Это просто! ...". В процедуре установки резидента (Set_resident) записано:
mov ax,2521h
mov dx,offset Int_21h_proc
int 3 ;"Повесим" нашу процедуру на 21h прерывание
Вопрос: как прерыванию 03h удается переопределить вектор пррывания 21h ? Т.к. эту операцию выполняет функия 25h пррывания 21h, то 03h-е к этому моменту уже должно откуда-то знать, что на него подвешено 21h. Что же там происходит?
Спасибо.


Приложение:


Вопрос отправлен: 19.12.2002, 16:02
Отправитель: Bayram Annanurov

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

Отвечает Bob Johnson

Добрый день, Bayram Annanurov!
Так у тебя же в примере адрес обработчика 21h заносится в вектор 3. Вот поэтому потом можно использовать 3 как 21h.


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


Отвечает Traish

Добрый день, Bayram Annanurov!
Дело в том, что установить вектор прерывания можно не только функцией 21h прерывания, но и прямой модификацией таблицы векторов прерываний, которая находится по адресу 0000:0000. Каждый вектор имеет длину 4 байта.
mov es:[3*4],bx
mov es:[3*4+2],ax
Этот код и устанавливает вектор 3 на старый обработчик 21h

Ответ отправлен: 19.12.2002, 18:39
Отправитель: Traish


Отвечает Александр

Приветствую Вас, Bayram Annanurov!
А те строчки которые не были прокомментированы естественно и не вызвали у тебя никаких вопросов.
mov es:[3*4],bx
mov es:[3*4+2],ax
В этих строчках собственно и производится установка обработчика 21-го прерывания на 3-е. Т.е. когда говорят int 3 реально вызывается оригинальный int 21.


Ответ отправлен: 20.12.2002, 11:31
Отправитель: Александр


Отвечает Maverick

Добрый день, Bayram Annanurov!
Хай, а ты погляди внимательнее:
mov es:[3*4],bx
mov es:[3*4+2],ax
Ну и перед этим, короче мы установили int 21h на 3h
Так мы наколим TD!


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


Отвечает ASMодей

Приветствую Вас, Bayram Annanurov!
Вектор INT 03h ничего не переопределяет, это просто точка
останова программы (breakpoint) и используется он отладчиками.
Так что смотри дальше по тексту программы: там должен быть
вызов INT 21h.


Ответ отправлен: 20.12.2002, 06:03
Отправитель: ASMодей



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

Внимание!
Форма может работать некорректно в почтовых программах "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 (39)
C / C++ (30)
Perl (5)
Delphi (21)
Pascal (23)
Basic / VBA (10)
Java / JavaScript (6)
PHP (4)
MySQL / MSSQL (5)
Пользователю
Windows 95/98/Me (32)
Windows NT/2000/XP (27)
"Железо" (32)
Поиск информации (14)
Администратору
Windows NT/2000/XP (10)
Linux / Unix (14)
Юристу
Гражданское право (8)
Семейное право (3)
Трудовое право (5)
КоАП (2)

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




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

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


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

В избранное