purebasic.info

PureBasic forum
Текущее время: Сб июн 23, 2018 9:09 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Сб янв 21, 2012 11:48 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт май 24, 2011 7:01 pm
Сообщений: 505
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
выкладывайте что нужно перевести, посмотрим что получится


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 22, 2012 12:10 am 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт апр 14, 2009 7:22 pm
Сообщений: 297
Благодарил (а): 1 раз.
Поблагодарили: 13 раз.
Пункты репутации: 0
Пётр писал(а):
.....там есть какие-то необычные типы переменных и это не структуры, что что-то другое.

если это чистый си, не чего кроме структур и объединений быть не может.... давай фрагменты....
просто вложенность .h файлов может быть большой и ты просто не видишь описаний


и конечно дефайны ... т.е переименование типов для читабельности кода.... есть пример через дефайны организация русского синтаксиса в си для компиляторов пропускающих что то больше 127(ascii)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 22, 2012 12:18 am 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
Димастый писал(а):
выкладывайте что нужно перевести, посмотрим что получится
Для начала, это нужно перевести.


Вложения:
ntddk.h [539.19 KiB]
Скачиваний: 801

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 22, 2012 10:28 am 
Не в сети
профессор

Зарегистрирован: Вт янв 13, 2009 2:41 pm
Сообщений: 370
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
Пункты репутации: 8
Перевод ntddk.inc с Fasm, возможно есть ошибки, если что, исправляйте и выкладывайте обновлённые версии


Вложения:
ntddk_pb.zip [15.38 KiB]
Скачиваний: 228
Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 22, 2012 1:28 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
Fox писал(а):
Перевод ntddk.inc с Fasm
Спасибо.
В ближайшее время постараюсь протестировать.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс янв 22, 2012 2:59 pm 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Петр писал(а):
Я дров не устанавливал. Подождал пока его испытают другие.
Хитрый. Я бы так же сделал :)


Fox писал(а):
я уже даже бипер сварганил=)
Круто :)

Fox писал(а):
Перевод ntddk.inc с Fasm, возможно есть ошибки, если что, исправляйте и выкладывайте обновлённые версии
Ошибки есть с union. Но теперь хоть что то будет, thanks.

Fox писал(а):
Вообще драйвера никогда не писал, хотел когда то написать перехват запуска процессов, но потом появились другие дела и я эту идею забросил.
Добавил перехват запуска процессов в первый пост. Там номер системной функции NtOpenProcess "вшит" и вроде как это плохо, если windows отличается от тех что там есть. Видимо надо как то динамически его получать.. Описание здесь.

Fox писал(а):
Хотелось бы чего нибудь типа общения юзермодного приложения с драйвером, ну или вызов юзермодных функций из драйвера (вроди бы где-то читал, что такое возможно, х\з).
Будет когда нибудь. Первое точно.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн янв 23, 2012 1:25 pm 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Обработчик исключений, с которым комп будет реже презагружатся от глупых ошибок:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Structure ehSEH
        ehEip.l
        ehEsp.l
        ehEbp.l
EndStructure
Global seh.ehSEH
Global iferror.l
Macro _try(label)
        iferror = @ExceptionHandler1()
        !push [v_iferror]
        !push dword[fs:0]
        !mov [fs:0], esp
        seh\ehEip = ?label
        !mov [v_iferror], esp
        seh\ehEsp = iferror
        !mov [v_iferror], ebp
        seh\ehEbp = iferror
        iferror = 0
EndMacro
Macro _finally(label)
        label:
        !pop dword[fs:0]
        !add esp, 4
EndMacro
ProcedureC ExceptionHandler1(*Except.EXCEPTION_RECORD, *pFrame, *Context.CONTEXT, *pDispatch)
        If *Except\ExceptionCode = $C0000005
                iferror = 1
        EndIf
        *Context\Eip = seh\ehEip
        *Context\Esp = seh\ehEsp
        *Context\Ebp = seh\ehEbp
        ProcedureReturn 0
EndProcedure



Код:
1
2
3
4
5
6
7
8
9
        _try(L1)
                !xor eax,eax
                !mov eax,[7]
        _finally(L1)
 
        _try(L2)
                !xor eax,eax
                !mov [9],eax
        _finally(L2)



После можна проверить iferror на 1, дабы убедиться что между try и finally случился exception.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 11, 2012 4:39 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
А как вызывать функции типа IoGetCurrentIrpStackLocation()?

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 11, 2012 6:34 pm 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Это макрос. Принимает структуру IRP, описания которой конечно нет в стандартном пурике.

Код:
1
2
3
4
5
Procedure IoGetCurrentIrpStackLocation(*irp)   ;(*irp._IRP)
        ;ProcedureReturn *irp\Tail\Overlay\CurrentStackLocation
        ProcedureReturn PeekL(*irp+$60)
EndProcedure
 



Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
_IRP Struct
    irpType         WORD                ?  ;+000h
    irpSize         WORD                ?  ;+002h
    MdlAddress      pMDL                ?  ;+004h
    Flags           DWORD               ?  ;+008h
    UNION ;AssociatedIrp
      MasterIrp     pIRP        ?  ;+00Ch
      IrpCount      DWORD       ?  ;+00Ch
      SystemBuffer  pVOID       ?  ;+00Ch
    ENDS ; AssociatedIrp
    ThreadListEntry LIST__ENTRY         <>  ;+010h
    IoStatus        IO_STATUS_BLOCK     <>  ;+018h
    RequestorMode   BYTE                ?  ;+020h
    PendingReturned BYTE                ?  ;+021h
    StackCount      BYTE                ?  ;+022h
    CurrentLocation BYTE                ?  ;+023h
    Cancel          BYTE                ?  ;+024h
    CancelIrql      BYTE                ?  ;+025h
    ApcEnvironment  BYTE                ?  ;+026h
    AllocationFlags BYTE                ?  ;+027h
    UserIosb        pIO_STATUS_BLOCK    ?  ;+028h
    UserEvent       pKEVENT             ?  ;+02Ch
    UNION  ;Overlay
      STRUCT ;AsynchronousParameters
        UserApcRoutine  pFunction   ?  ;+030h
        UserApcContext  pVOID       ?  ;+034h
      ENDS ;AsynchronousParameters
      AllocationSize    LARGE_INT   <>  ;+030h
    ENDS
    CancelRoutine   pFunction           ?  ;+038h
    UserBuffer      pVOID               ?  ;+03Ch
    UNION    ;Tail
      STRUCT   ;Overlay
        DeviceQueueEntry    KDEVICE_QUEUE_ENTRY <>  ;+040h
      ENDS ;Overlay
      STRUCT
        DriverContext           pVOID 4 DUP         (?)     ;+040h
        Thread                  pETHREAD            ?      ;+050h
        AuxiliaryBuffer         DWORD               ?      ;+054h
        ListEntry               LIST__ENTRY         <>      ;+058h
        UNION
            CurrentStackLocation    pIO_STACK_LOCATION  ?  ;+060h
            PacketType              DWORD               ?  ;+060h
        ENDS
        OriginalFileObject      pFILE_OBJECT        ?      ;+064h
      ENDS
      UNION
        Apc           KAPC      <>                          ;+040h
        CompletionKey pVOID     ?                          ;+040h
      ENDS
    ENDS ;Tail
_IRP ENDS



Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 11, 2012 7:40 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
puremaster писал(а):
Принимает структуру IRP, описания которой конечно нет в стандартном пурике.
Она есть в файле от Fox'а.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб фев 11, 2012 9:09 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
Это тоже макросы?
Цитата:
IoCompleteRequest()
RtlInitUnicodeString()
IoCreateDevice()
IoCreateSymbolicLink()
IoDeleteSymbolicLink()
IoDeleteDevice()

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 5:00 am 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Пётр писал(а):
puremaster писал(а):
Принимает структуру IRP, описания которой конечно нет в стандартном пурике.
Она есть в файле от Fox'а.

Действительно, но макроса то нет :)


Цитата:
Это тоже макросы?
Цитата:
IoCompleteRequest()
RtlInitUnicodeString()
IoCreateDevice()
IoCreateSymbolicLink()
IoDeleteSymbolicLink()
IoDeleteDevice()

Код:
1
IoCompleteRequest()


Остальные совсем не макросы.
В winddk IoCompleteRequest меняется на IofCompleteRequest.. обе функции есть в экспорте ntoskrnl.exe. Разница в них, видимо, только в том, что IofCompleteRequest передает параметры через fastcall.

Чтоб эти функции подключить к импорту, надо обязательно прописать !extrn каждой функции
Код:
1
2
3
...
!extrn _IoCompleteRequest@8
...


Вообщем точно также как добавляется DbgPrint в примерах.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 12:58 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11188
Благодарил (а): 4 раз.
Поблагодарили: 416 раз.
puremaster писал(а):
Вообщем точно также как добавляется DbgPrint в примерах.
Сделал так:
Код:
1
2
3
4
5
6
7
8
ImportC "ntoskrnl.lib"
  IoCompleteRequest(*IRP, PriorityBoost)
  RtlInitUnicodeString(*UString, *String)
  IoCreateDevice(*DriverObject, DeviceExtensionSize, *UDeviceName, DeviceType, DeviceCharacteristics, Exclusive, *DeviceObject)
  IoDeleteDevice(*DeviceObject)
  IoCreateSymbolicLink(*SymbolicLinkName, *DeviceName)
  IoDeleteSymbolicLink(*SymbolicLinkName)
EndImport

Код:
1
2
3
4
5
6
!extrn _IoCompleteRequest@8
!extrn _RtlInitUnicodeString@8
!extrn _IoCreateDevice@28
!extrn _IoDeleteDevice@4
!extrn _IoCreateSymbolicLink@8
!extrn _IoDeleteSymbolicLink@4

Компилируется и в HEX редакторе видно что функции добавлены в импорт.
Но при попытке вызвать хоть одну из этих функций, скажем так:
Код:
1
IoCompleteRequest(*pIrp, #IO_NO_INCREMENT)

прога перестает компилироваться.

PS.
Похоже что прослойка между транслятором и ФАСМом, "хавает" сообщения об ошибках от ФАСМа и хз что не так.

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


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 1:28 pm 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Так @8 в имени как бы намекает на stdcall.

И таки да прослойка "хавает" сообщения об ошибках. Если бы кто нибудь написал эту прослойку с нуля как надо, а то я не умею :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 1:51 pm 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
французы перевели вот этот код на PB:
http://cpansearch.perl.org/src/ROOTKWOK ... .85/main.c
получилось:
http://www.purebasic.fr/french/viewtopi ... 700#p71700
Это типа пример как без драйвера читать\писать в ядерной памяти. В winxp скрывает процесс в диспетчерах задач, в win7 лучше не запускайте.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB