· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Проблема со структурой в FASME (как правильно описать)?

Посл.отвђт Сообщен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