|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 14, 2004 14:12:29 Ниже накнопан участок кода, который при определенном услвии выполняет либо перезагрузку, либо выключение компа. ; ; FASM ; struct LUID .LowPart dd ? .HighPart dd ? ends struct LUID_AND_ATTRIBUTES .Luid LUID .Attributes dd ? ends struct TOKEN_PRIVILEGES .PrivilegeCount dd ? .Privileges LUID_AND_ATTRIBUTES ends ; ; ... ... szShut db 'SeShutdownPrivilege',0 tkp TOKEN_PRIVILEGES h_token dd ? ... ... ; ; xor ebx,ebx xor eax,eax mov al,[task_numb] ; либо 0, либо 1. inc eax ; т.е. либо EWX_SHUTDOWN, либо EWX_REBOOT. or eax,EWX_FORCE ; т.е. либо EWX_SHUTDOWN or EWX_FORCE, либо EWX_REBOOT or EWX_FORCE. mov esi,eax invoke GetVersion test eax,80000000h jnz .Win9x invoke GetCurrentProcess invoke OpenProcessToken,eax,28h,h_token invoke LookupPrivilegeValue,ebx,szShut,tkp.Privileges.Luid mov [tkp.PrivilegeCount],1 mov [tkp.Privileges.Attributes],2 invoke AdjustTokenPrivileges,[h_token],ebx,tkp,ebx,ebx,ebx .Win9x: invoke ExitWindowsEx,esi,0FFFFh ; ; MASM32 ; ... ... szShut db 'SeShutdownPrivilege',0 tkp TOKEN_PRIVILEGES <> h_token dd ? ... ... ; ; xor ebx,ebx xor eax,eax mov al,task_numb ; либо 0, либо 1. inc eax ; т.е. либо EWX_SHUTDOWN, либо EWX_REBOOT. or eax,EWX_FORCE ; т.е. либо EWX_SHUTDOWN or EWX_FORCE, либо EWX_REBOOT or EWX_FORCE. mov esi,eax invoke GetVersion test eax,80000000h jnz Win9x invoke GetCurrentProcess invoke OpenProcessToken,eax,28h,offset h_token invoke LookupPrivilegeValue,ebx,offset szShut,offset tkp.Privileges[0].Luid mov tkp.PrivilegeCount,1 mov tkp.Privileges[0].Attributes,2 invoke AdjustTokenPrivileges,h_token,ebx,offset tkp,ebx,ebx,ebx Win9x: invoke ExitWindowsEx,esi,0FFFFh Вроде бы одинаковое исполнение кода на разных диалектах ассемблера, но вот почему-то вариант на FASMе ни как не хочет работать. Полагаю я допустил ошибку при объявлении структуры TOKEN_PRIVILEGES, но иного способа я не нашел. Может быть кто подскажет как заставить работать FASMовский код? |
|
|
Дата: Окт 14, 2004 14:27:57 Что мешает заглянуть в дизассемблер и выяснить одинаковый ли код сгенерил компилятор в обоих случаях? |
|
|
Дата: Окт 14, 2004 14:40:19 Почему бы начало не переписать так: xor ebx,ebx mov esi,[task_numb] inc esi or esi,EWX_FORCE |
|
|
Дата: Окт 14, 2004 14:48:57 Спасибо, что хоть идиотом не обозвали... ... ... ... task_numb db ? |
|
|
Дата: Окт 14, 2004 14:57:09 > task_numb db ? Ну сделай DWORD'ом или movzx |
|
|
Дата: Окт 14, 2004 17:18:45 На первый взгляд, со структурой проблем нет. Можно конечно попробовать сделать так: tkp: .PrivilegeCount dd ? .Privileges.Luid: .Privileges.Luid.LowPart dd ? .Privileges.Luid.HighPart dd ? .Privileges.Attributes dd ? ЗЫ test eax,80000000h jnz можно заменить на: test eax,eax js a в данном случае и на: dec eax js |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.046 |