Прерывания биос в CallWindowProc

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Прерывания биос в CallWindowProc

Сообщение Alprog » 15.05.2008 (Чт) 14:39

Здраствуйте.

Вообще я делаю лабораторную по программированию. Когда можно выбирать язык программирования, я принципиально пишу на vb. Даже если основное условие задания - использовать указатели :)

Сейчас у нас ассемблер, но разрешается писать на языке высокого уровня с ассемблерными вставками. Для этого я использую апишную функцию CallWindowProc на vb (предварительно листинг программы перегнав в hex-строку).

Делал, исходя из этих примеров:
http://www.dotfix.net/module.php?module ... 7871355843
http://www.dotfix.net/module.php?module ... 7771776231

Проблема заключается в том, что мне нужно использовать прерывания биоса и доса. В частности, int 10h, int 11h, int 21h.

Однако наличие любой из вышеперечисленных команд в теле функции крошит всю IDE.

Собственно, хотелось бы узнать почему так происходит, можно ли это вылечить, и как с этим бороться.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.05.2008 (Чт) 15:02

Сейчас у нас ассемблер, но разрешается писать на языке высокого уровня с ассемблерными вставками. Для этого я использую апишную функцию CallWindowProc на vb (предварительно листинг программы перегнав в hex-строку).

Дурацкая практика - гнать всё в hex-строку.


Однако наличие любой из вышеперечисленных команд в теле функции крошит всю IDE.

Собственно, хотелось бы узнать почему так происходит, можно ли это вылечить, и как с этим бороться
.
Потому, что всё это не имеет смысла в Windows. Прерывания есть, но они доступны только из ring-0. Прерываний DOS же нет вообще.

Windows программы работают иным образом. Они вызывают специальные функции, предоставляемые системой, т.н. WinAPI функции.

P.S. Вот интересно, заставил использовать прерывания DOS в лабораторной тебя преподователь?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 15.05.2008 (Чт) 15:33

Прерывания есть, но они доступны только из ring-0.
Прерывания BIOS'а и DOS'а вообще нигде недоступны в windows.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.05.2008 (Чт) 15:40

ANDLL
Читай по тексту дальше.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Re: Прерывания биос в CallWindowProc

Сообщение alibek » 15.05.2008 (Чт) 16:10

Alprog писал(а):Проблема заключается в том, что мне нужно использовать прерывания биоса и доса. В частности, int 10h, int 11h, int 21h.

И каким же образом, если io.sys нынче не загружается?
В лучшем случае это под Windows 9x получится, и то у меня сомнения.
Lasciate ogni speranza, voi ch'entrate.

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 15.05.2008 (Чт) 16:29

Читай по тексту дальше.
Проблема заключается в том, что мне нужно использовать прерывания биоса и доса.

Прерывания есть, но они доступны только из ring-0.Прерываний DOS же нет вообще.
Прерывания BIOS'а и DOS'а вообще нигде недоступны в windows.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.05.2008 (Чт) 16:56

ANDLL
Фраза "Прерывания есть" справедлива. Механизм прерываний есть и работает в Windows. Придирка необоснована.

Фраза "Прерываний DOS же нет вообще" не означает, что "их нет, но есть прерывания BIOS".

А вот твоя фраза "Прерывания BIOS'а и DOS'а вообще нигде недоступны в windows. " была бы уместной, если бы я не назвал ни BIOS, ни DOS.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Alprog
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 127
Зарегистрирован: 15.05.2008 (Чт) 14:21
Откуда: Владивосток

Сообщение Alprog » 15.05.2008 (Чт) 17:55

P.S. Вот интересно, заставил использовать прерывания DOS в лабораторной тебя преподователь?

Возможно, дело в том, что лабы предполагают запуск через far.

Windows программы работают иным образом. Они вызывают специальные функции, предоставляемые системой, т.н. WinAPI функции.

А можно ли создать на vb приложение под Дос?
Если нет, то есть ли WinAPI эквивалентные хм... DosAPI (int 10h, int11h, int 21h...)?

Дурацкая практика - гнать всё в hex-строку.

Есть другой способ?[/quote]

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.05.2008 (Чт) 18:18

Alprog
FAR это сугубо виндовый менеджер. Покрайней мере, был.

А можно ли создать на vb приложение под Дос?

Нет? Но зачем, если последний практически умер? Но приложенеи под DOS можно создать, скажем, в QB.


Если нет, то есть ли WinAPI эквивалентные хм... DosAPI (int 10h, int11h, int 21h...)?


DosAPI-ей не существует. WinAPI в некоторой степени эквивалетные некоторым функциям некоторых прерываний - есть, но всё же, это совсем другой подход. Но, ты можешь быть уверен, что с помощью WinAPI можно сделать абсолютно всё, что вообще в принципе можно сделать в системе, ибо все программы общаются с системой исключительно через WinAPI.

Есть другой способ?

Разумеется.


Решил глянуть. Констатирую: описанные способы - кривые, код сделанный с помощью них - работать будет только на системах с неработающим DEP. А чем дальше, тем меньше таких систем становится.

Как выполнять ASM-код можно посмотреть в моей статье. Она не об этом, но этот момент там тоже довольно хорошо осещён.

Кроме того, что описанный там способ - некривой, он не использует API-функцию CallWindowProc каждый раз + может использоваться без ограничений (у CallWindowsProc есть ограничение - код, который ею вызывается должен обязательно вычищать из стека 4 дворда. Если этот свой код - то это ещё терпимо. Если же это код другой функции, то приходится идти большим обходным путём.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 15.05.2008 (Чт) 22:01

Проблема заключается в том, что мне нужно использовать прерывания биоса и доса. В частности, int 10h, int 11h, int 21h.

Однако наличие любой из вышеперечисленных команд в теле функции крошит всю IDE.

Собственно, хотелось бы узнать почему так происходит, можно ли это вылечить, и как с этим бороться.


Какой-то бред. Зачем использовать прерывания? Они пишут под ДОС? Не верю. Даже в самом заштатном Мухосранске теперь не найти компьютеров с MS-DOS. Может пишут драйвера под NT с использованием DDK? Тоже вряд-ли.
Автор вопроса написал околесицу, сам не понимает о чем спрашивает

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 15.05.2008 (Чт) 22:18

Alprog, пиши на тасме (асме) и не создавай проблем. НА vb ты такого не сделаешь. Для препода важен алгоритм работы проги и мнемо-код. Пишешь стандартный .com файл:
Код: Выделить всё
DOSSEG
   .MODEL SMALL
   .STACK 100h
   .DATA
   .CODE
EhcoLoop:
   mov    ah,1              ; функция DOS ввода с
                            ; клавиатуры
   int    21h               ; получить следующую клавишу
   cmp    al,13             ; это клавиша ENTER?
   jz     EchoDone          ; да, выполняем эхоотображение
   mov    dl,al             ; поместить символ в DL
   mov    ah,2              ; функция DOS вывода на экран
   int    21h               ; вывести на экран символ
   jnz    EchoLoop          ; отобразить следующий символ
EchoDone:
   mov    ah,4ch            ; функция DOS завершения
                            ; программы
   int    21h               ; завершить программу
   END


Давно не писал :lol: ... Но винда потом все это дело будет отрабатывать в эмуляции на ура.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.05.2008 (Чт) 22:30

Если для препода важен алогитм, то использование WinAPI его должно в полной мере удовлетворить.

А то получается, что ему нужен не алгоритм а сам факт юзания прерываний.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 15.05.2008 (Чт) 22:32

Да и вообще задумка написать Dos прогу на VB (Win32) - изврат полнейший! Для этого по курсу информатики и изучают ассемблер а не VB! :lol:
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 15.05.2008 (Чт) 22:37

Нет, JohnK, ассемлер изучают не для этого.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 15.05.2008 (Чт) 22:46

Ассемблер по курсу информатики изучают для ознакомление с языком и архитектурой x86.
Хакер, просвети.
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 6

    TopList