почему компилятор masm32 сам (в исходнике я вообще не вспоминал про int 3) вставляет дебажное прерывание в код драйвера? Опции компиляции вполне тривиальные: f:\masm32\bin\ml.exe /nologo /c /coff %1.asm f:\masm32\bin\link.exe /nologo /driver /base:0x10000 /align:32 /out:%1.sys /subsystem:native %1.obj , компилится и линкуется без проблем.
наверняка это выравнивание масм выранивает 0CCh, 090h, 00h и ещё чем-то, не помню уже но в любом случае - это всего лишь файловое выравнивание для проверки попробу написать в коде align 16 и посмотреть его в hex редакторе
IceStudent в драйвер .sys, конкретно в процедуру DriverEntry: .text:00010457 ; ---------------------------------------------------------------------- ----- .text:00010457 .text:00010457 loc_10457: ; CODE XREF: start+42j .text:00010457 push [ebp+DeviceObject] ; DeviceObject .text:0001045A call IoDeleteDevice .text:0001045F .text:0001045F loc_1045F: ; CODE XREF: start+2Fj .text:0001045F ; start+6Aj .text:0001045F int 3 ; Trap to Debugger .text:0001045F start endp int 3 это CCh, но на выравнивание не похоже (хотя в данном примере да, align 16), но если скажем добавить еще одну команду в тело DriverEntry, то хвост будет таким: .text:00010459 ; ---------------------------------------------------------------------- ----- .text:00010459 .text:00010459 loc_10459: ; CODE XREF: start+44j .text:00010459 push [ebp+DeviceObject] ; DeviceObject .text:0001045C call IoDeleteDevice .text:00010461 .text:00010461 loc_10461: ; CODE XREF: start+31j .text:00010461 ; start+6Cj .text:00010461 int 3 ; Trap to Debugger .text:00010461 start endp
Незнаю почему у тебя так .. но у меня при таких же параметрах: E:\ASM\masm32\bin\ml /nologo /c /coff %drv%.asm E:\ASM\masm32\bin\link /nologo /driver /base:0x10000 /align:32 /out:%drv%.sys /subsystem:native /ignore:4078 %drv%.obj ида выдает (весь код из процедуры DriverEntry) : 000108E0 push ebp 000108E1 mov ebp, esp 000108E3 add esp, 0FFFFFF80h 000108E6 push offset aDriverentry ; "-------DriverEntry------\r\n" 000108EB call j_DbgPrint 000108F0 add esp, 4 000108F3 mov [ebp+var_4], 0C0000182h 000108FA lea eax, [ebp+var_8] 000108FD push eax 000108FE push 0 00010900 push 100h 00010905 push 12h 00010907 push offset unk_108A0 0001090C push 0 0001090E push [ebp+arg_0] 00010911 call j_IoCreateDevice 00010916 or eax, eax 00010918 jnz loc_10A65 0001091E push offset unk_108A0 00010923 push offset unk_108C4 00010928 call j_IoCreateSymbolicLink 0001092D or eax, eax 0001092F jnz loc_10A5D 00010935 push 6Ch 00010937 lea eax, [ebp+var_78] 0001093A push eax 0001093B call j_RtlZeroMemory ---------------------------- 000109D2 cmp [ebp+var_4], 0 000109D6 jz short loc_10A10 000109D8 push offset unk_108C4 000109DD call j_IoDeleteSymbolicLink 000109E2 push [ebp+var_8] 000109E5 call j_IoDeleteDevice 000109EA push offset aRegisterFault ; "-------Register Fault------\r\n" 000109EF call j_DbgPrint как видишь и при старте и выгрузке у меня нет никаких int 3. Видимо ты где-то в макросах намудрил или еще чего .. Сомневаюсь что виноват компилятор.