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

 WASM Phorum —› WASM.ASSEMBLER —› CloseHandle может я тупой???

Посл.отвђт Сообщенiе


Дата: Сен 13, 2004 14:33:20

Гспода поможите разобраться в глюке.
.386

.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\advapi32.inc
includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

IDR_MAIN_EXE equ 30001

.data
MsgBoxCaption db "Iczelion Tutorial No.2",0
MsgBoxText db "Ýòî ÍÒ!",0
MsgBoxCaption1 db "Iczelion Tutorial No.2",0
MsgBoxText1 db "Ïðàâà Àäìèíà ÂÀÓ!",0
MsgBoxText2 db "Óïñ îáëîì :-(",0
LibName db "ntlib.dll",0
FunctionName db "IsNT",0
Name_Main_Exe db "main", 0
fName db "\ntlib.dll", 0
hFile dd 0
written dd 0


EXres PROTO

.data?
hLib dd ?
IsNTAddr dd ?
folderbuffer db 512 dup(?)
.code
start:

invoke EXres
invoke LoadLibrary,addr LibName
mov hLib,eax
invoke GetProcAddress,hLib,addr FunctionName
mov IsNTAddr,eax
call [IsNTAddr]
.if eax == FALSE
jmp endpr
.endif
invoke MessageBox, NULL, addr MsgBoxText, addr MsgBoxCaption, MB_OK
invoke OpenSCManager, NULL, NULL, SC_MANAGER_ALL_ACCESS
or eax,eax
jnz admin
invoke MessageBox, NULL, addr MsgBoxText2, addr MsgBoxCaption1, MB_OK
jmp endpr
admin: invoke CloseServiceHandle, eax
invoke MessageBox, NULL, addr MsgBoxText1, addr MsgBoxCaption1, MB_OK
jmp endpr
endpr: invoke ExitProcess, NULL

EXres PROC
;ñîçäà¸ì ôàéëû, èçâëåêàÿ èõ èç ðåñóðñîâ.
local hResInfo_file_1:HRSRC
local cb_file_1:UINT
local pRes_1:LPVOID
invoke FindResource, NULL, IDR_MAIN_EXE, addr Name_Main_Exe
.if eax != NULL
mov hResInfo_file_1, eax
invoke LoadResource, NULL, hResInfo_file_1
.if eax != NULL
mov pRes_1, eax
invoke SizeofResource, NULL, hResInfo_file_1
mov cb_file_1, eax
invoke LockResource, hResInfo_file_1
invoke lstrcat, ADDR folderbuffer, ADDR fName
invoke CreateFile,OFFSET folderbuffer,GENERIC_WRITE,\
FILE_SHARE_READ,0,CREATE_ALWAYS,\
FILE_ATTRIBUTE_NORMAL,0
mov hFile,eax
invoke WriteFile,hFile,pRes_1,cb_file_1,OFFSET written,NULL
invoke CloseHandle,hFile
.endif
.endif
EXres ENDP

end start
скажем так большая часть кода выдрана из install_machine ALx aka 1990 процедура EXres вся основана на его коде. Суть идеи вытащить из своих внутренностей дллку и поработать с ней. Вытаскивает и сохраняет ее нормально а потом когда оллидебаг доходит до invoke CloseHandle,hFile происходит улет в advapi32.dll и все программа совершила ошибку что к чему не понятно. Вот еще экзешник.

_2120198578__msg.zip


Дата: Сен 13, 2004 14:41:05

Похоже ты после invoke CloseHandle,hFile забыл ret поставить :)
По-этому после процедуры вытаскивания длл-ки выполняеться первая попавшаяся инструкция , а у тебя там как раз импорты (переходники в Advapi32.dll :)


Дата: Сен 13, 2004 14:43:29

@#$% точно заклинило пасибо :-)))


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.083