CloseHandle может я тупой???

Тема в разделе "WASM.ASSEMBLER", создана пользователем Grevg23, 13 сен 2004.

  1. Grevg23

    Grevg23 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2004
    Сообщения:
    17
    Адрес:
    Russia
    Гспода поможите разобраться в глюке.

    .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 и все программа совершила ошибку что к чему не понятно. Вот еще экзешник.

    [​IMG] _2120198578__msg.zip
     
  2. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine
    Похоже ты после invoke CloseHandle,hFile забыл ret поставить :)

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

    Grevg23 New Member

    Публикаций:
    0
    Регистрация:
    13 сен 2004
    Сообщения:
    17
    Адрес:
    Russia
    @#$% точно заклинило пасибо :)))