я кажется понял почему это изначально никак не хотело компилироваться) .386p includelib C:\masm32\lib\ntoskrnl.lib include C:\masm32\bin\win98\inc\win98\vmm.inc include C:\masm32\bin\win98\inc\win98\vxdldr.inc extrn KeNumberProcessors:PROC extrn KeRevertToUserAffinityThread:PROC extrn KesetSystemAffinityThread:PROC extrn IoForwardllrpSynchronously:PROC DECLARE_VIRTUAL_DEVICE OSXPKERN,1,0, OSXPKERN_Control, 99h, NTKERN_INIT_ORDER Begin_control_dispatch OSXPKERN Control_Dispatch Sys_Critical_Init, AdExpTabl End_control_dispatch OSXPKERN VxD_PAGEABLE_DATA_SEG hexport dd 0 ntker db 'ntoskrnl.exe',0 offunk dd offset kenumb dd offset KeRevertToUse dd offset KesetSystemAf dd offset IoForwardllrp aKeNumberPr db "KeNumberProcessors" aKeRevertToUse db "KeRevertToUserAffinityThread" aKesetSystemAf db "KesetSystemAffinityThread" aIoForwardll db "IoForwardllrpSynchronously" oftabntkrnl dd offset aKeNumberPr dd offset aKeRevertToUse dd offset aKesetSystemAf dd offset aIoForwardll ordinal db 0,0,1,0,2,0,3,0 VxD_PAGEABLE_DATA_ENDS VxD_PAGEABLE_CODE_SEG BeginProc KeRevertToUse call KeRevertToUserAffinityThread EndProc KeRevertToUse BeginProc KesetSystemAf call KesetSystemAffinityThread EndProc KesetSystemAf BeginProc IoForwardllrp call IoForwardllrpSynchronously EndProc IoForwardllrp VxD_PAGEABLE_CODE_ENDS VxD_INIT_CODE_SEG BeginProc AdExpTabl push 0 push offset offunk push offset ordinal push offset oftabntkrnl push 1 push 4 push 4 push offset ntker push offset hexport VxDCall _PELDR_AddExportTable ret EndProc AdExpTabl VxD_INIT_CODE_ENDS end из-за двойных имен)
Друзья, ничего непонимаю) Почему этот код не хочет компилироваться? .386p includelib C:\masm32\lib\ntoskrnl.lib include C:\masm32\bin\win98\inc\win98\vmm.inc include C:\masm32\bin\win98\inc\win98\vxdldr.inc extrn KeNumberProcessors:BYTE extrn KeRevertToUserAffinityThread:PROC extrn KesetSystemAffinityThread:PROC extrn IoForwardlrpSynchronously:PROC DECLARE_VIRTUAL_DEVICE OSXPKERN,1,0, OSXPKERN_Control, 99h, NTKERN_INIT_ORDER Begin_control_dispatch OSXPKERN Control_Dispatch Sys_Critical_Init, AdExpTabl End_control_dispatch OSXPKERN VxD_PAGEABLE_DATA_SEG hexport dd 0 ntker db 'ntoskrnl.exe',0 offunk dd offset KeNumberProcessors dd offset KeRevertToUse dd offset KesetSystemAf dd offset IoForwardllrp aKeNumberPr db "KeNumberProcessorK" aKeRevertToUse db "KeRevertToUserAffinityThreaK" aKesetSystemAf db "KesetSystemAffinityThreaK" aIoForwardll db "IoForwardlrpSynchronouslK" oftabntkrnl dd offset aKeNumberPr dd offset aKeRevertToUse dd offset aKesetSystemAf dd offset aIoForwardll ordinal db 0,0,1,0,2,0,3,0 VxD_PAGEABLE_DATA_ENDS VxD_PAGEABLE_CODE_SEG BeginProc KeRevertToUse call KeRevertToUserAffinityThread EndProc KeRevertToUse BeginProc KesetSystemAf call KesetSystemAffinityThread EndProc KesetSystemAf BeginProc IoForwardllrp call IoForwardlrpSynchronously EndProc IoForwardllrp VxD_PAGEABLE_CODE_ENDS VxD_INIT_CODE_SEG BeginProc AdExpTabl push 0 push offset offunk push offset ordinal push offset oftabntkrnl push 1 push 4 push 4 push offset ntker push offset hexport VxDCall _PELDR_AddExportTable ret EndProc AdExpTabl VxD_INIT_CODE_ENDS end
Код наверно на дух непереваривает скрип-киддисов которым лень разбираться но хочется всего и сразу. Как-то так...
Я что-то нигде не нашел учебника по написанию vxd без использования макросов) но я всё же попытался от них избавиться в своем исходнике, но столкнулся с одной проблемой. я не знаю как директивой extrn обьявить метку( Например: .386p includelib C:\masm32\lib\ntoskrnl.lib include C:\masm32\bin\win98\inc\win98\vmm.inc include C:\masm32\bin\win98\inc\win98\vxdldr.inc extrn AdExpTabl:far LCOD segment para public 'CODE' use32 ASSUME cs:LCOD Control_0 proc near cmp eax, 0 jz AdExpTabl clc retn Control_0 endp LCOD ENDS ICOD segment para public 'CODE' use32 ASSUME cs:ICOD AdExpTabl: push 0 push offset offunk push offset ordinal push offset oftabntkrnl push 1 push 4 push 4 push offset ntker push offset hexport VxDCall _PELDR_AddExportTable retn ICOD ENDS end ;Control_0 Может подскажите?
Раз никто здесь не знает, отвечаю на свой вопрос. Вот как должна выглядеть строка межсегментного перехода: jz far ptr AdExpTabl Но начиная с версии 6.11c ml в этом месте выдает error A2004: symbol type conflict а в более ранних версиях этот код компилируется, но там проблема с coff форматом( Может на сей раз вы соизволите дать решение этой проблемы?