информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеСетевые кракеры и правда о деле ЛевинаАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] vxd call-ы: А еще немного, плиз !... 26.02.02 02:52  Число просмотров: 980
Автор: Chingachguk <Chingachguk> Статус: Member
Отредактировано 26.02.02 06:25  Количество правок: 2
<"чистая" ссылка>
Спасибо !! Вроде бы забрезжил свет ...

Во-первых, я разобрался, как читать сектора, переработав код Zef-а:

; Чтение дискеты из win32
.data
StartSector dd 0 ; // starting logical sector number
wSectors dw 1 ; // number of sectors
PoBuffer dd ?
Buffer db 512 dup(0) ; // address of read/write buffer
;...
mov eax,7305h ; //DOS Abs_Disk_Read
mov dword ptr PoBuffer,offset Buffer
mov ebx, offset StartSector ; = (DWORD)&dio;
mov ecx,-1 ; // use DISKIO struct
mov esi,0 ;//Read (for write - 1)
mov edi,2 ; = bDrive - 1;
push ecx
push eax
push 0002a0010h ; 01 - VMM32.VXD, 10 ? - get system time
call dword ptr ORD_0001 ; VxDCall
xor eax,eax
mov ax,word ptr Buffer[512-2]
call PrintEAX ; Для контроля выводим aa55h - маркер boot-а

Мне тока непонятно, почему получается дискеты, ведь я говорил
(mov edi,2 ; = bDrive - 1; ) - диска("C").

> > - Могу я звать VxD так, как делает это kernel32 -
> через
> > int 30h ?
>
> только для конкретного билда
> вызов-то происходит типа ARPL-exception из V86 mode
> т.е. идет КОНКРЕТНАЯ привязка кодов запроса и адресов в
> памяти VMM (int 30 обрабатывается в основном этой VxD)
> вызывай через KERNEL32.ORD_1 - это работает ВЕЗДЕ

Все, я понял. Ориентируюсь на вызов VxD через kernel.

> > - И где мне описать этот VxDCall, раз в инклюде
>> кернела моем его нет ?
> не по имени а по ординалу
> пообщайся со своим линкером он тебе объяснит
> у меня на ваткоме так:
>
> ASM> extrn myVxDCallFuckingThing :near
> LNK> include myVxDCallFuckingThing kernel32.1

Ага, надо научиться подлинковать эту "kernel32.1". Понял. Но вот что я хотел
сделать-то:

- Научиться звать сервис VxD "Execute V86 Interrupt". Собсна, для доступа к секторам диска(дискеты)-int 13h.(Может, надо поискать такой сервис в апи ? Или прямо такой сервис в VxD ?). Так вот, я нашел сервис в VMM32:

(вызов сервиса)
dw 0001h ; ID VMM32.vxd
dw 0084h ; "Execute V86 interrupt" - Номер сервиса.

Или это тоже надо делать так, как я работал с "int 25h" ??? И откуда там это магическое "mov eax,7305h ; //DOS Abs_Disk_Read" ? А какое число будет, если Int 13h зовешь ?! Странно...

- А еще я хотел понять, кто реально работает с файлами. Что не кернел, я уже понял.(Например, кто обрабатывает дескрипторы и имена файлов).

> > - А как параметры передавать-то(для VxD) ?

> существует 0-4 таблицы экспортов в VxD
> 1) V86 service table - документировано в DDK и еще в куче
> мест
> 2) WIN16 service table - документировано в DDK и почти
> совпадает с V86
> 3) VxD service table - документировано неплохо в DDK
> 4) WIN32 service table - не документировано НИГДЕ
>
> и это РАЗНЫЕ таблицы
>
> каждый исследует самостоятельно
> есть пару книжек с кусочками рассказов кто что нарыл
> > ps Я немного поэкспереметировал с этим ORD_0001 и

Если нетрудно, кинь мне(vzubko@mail.ru) ту доку, котрая мне поможет сделать Exec V86(или если есть прямой сервис для секторов, то для него). Или лучше DDK скачать ? (Меня его размер пугает - >30Мег).

> > Вроде работает, но с традиционным сообщением, причем
> IP
> > исключения = на следующей за последним int 3 командой.
> Но
> > это же не выход - адрес этого ORD так объявлять ...
>
> скажи мне чем и какими версиями ты собираешь - я тебе
> подскажу конкретней

Примерно так:
\masm32\bin\ml /c /coff %1.asm > \masm32\bin\asmbl.txt
...
\masm32\bin\Link /SUBSYSTEM:WINDOWS %1.obj

Спасибо еще раз !!!
<programming> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach