title image


Smiley Frage zu sich selbstlöschendem Assemblercode
Hallo

Frager hat hier vor etwa einem Monat, diese Procedure gepostet, mit der ein Programm seine eigene EXE löschen kann.

procedure DeleteSelf;var  hModule: THandle;  szModuleName: array[0..MAX_PATH] of char;  hKrnl32: THandle;  pExitProcess, pDeleteFile, pFreeLibrary, pUnmapViewOfFile, pRemoveDirectory:    pointer;  ExitCode: UINT;begin  hModule := GetModuleHandle(nil);  GetModuleFileName(hModule, szModuleName, sizeof(szModuleName));  hKrnl32 := GetModuleHandle('kernel32');  pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');  pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');  pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');  pUnmapViewOfFile := GetProcAddress(hKrnl32, 'UnmapViewOfFile');  ExitCode := system.ExitCode;  if ($80000000 and GetVersion()) <> 0 then begin // Win95, Win98, WinMe    asm      lea eax, szModuleName      push ExitCode      push 0      push eax      push pExitProcess      push hModule      push pDeleteFile      push pFreeLibrary      ret    end  end else begin // WinNt, Win2000, WinXP    CloseHandle(THANDLE(4));    asm       lea eax, szModuleName       push ExitCode       push 0       push eax       push pExitProcess       push hModule       push pDeleteFile       push pUnmapViewOfFile       ret    end  end;end;

Verändert diese Procedure den Aufrufstack so, dass nach dem Procedurende automatisch ExitProcess, DeleteFile und FreeLibrary/UnmapViewOfFile aufgerufen werden, oder wie arbeitet sie?

Und was muss an ihr verändert werden, dass noch andere Funktionen aufgerufenen werden?

 

  generiert mit sledit[1.02] by pumi .:sledit-info 


BeniBela

 

Meine Seite



geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: