Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.13;
Скачать: CL | DM;

Вниз

Удаление программы самой из себя!   Найти похожие ветки 

 
Anatoly Podgoretsky   (2004-01-26 15:21) [40]

DiamondShark © (26.01.04 15:17) [39]
А чего так, не работает :-)


 
DiamondShark   (2004-01-26 15:25) [41]


> Anatoly Podgoretsky © (26.01.04 15:21) [40]
> DiamondShark © (26.01.04 15:17) [39]
> А чего так, не работает :-)

Оказывается, из-под среды тоже работает.
Шаманство...


 
Vint   (2004-01-26 15:30) [42]

не, у меня под 98 не работает...

а вот на королевстве лежит функция, эта работает!
найди десять отличий ;)

procedure DeleteSelf;
var hModule:THandle;
szModuleName:array[0..MAX_PATH] of char;
hKrnl32 : THandle;
pExitProcess, pDeleteFile, pFreeLibrary,pUnmapViewOfFile : 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
// Win95, 98, Me
asm

lea eax, szModuleName
push ExitCode
push 0
push eax
push pExitProcess
push hModule
push pDeleteFile
push pFreeLibrary
ret
end
else
begin
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;


 
RealRascal   (2004-01-26 16:06) [43]

А я делаю так:
procedure SelfDestruct;
var f:textfile; s,s1:string; i:integer;
begin
s:=Application.ExeName;
i:=length(s);
repeat
if s[i]="\" then break;
s1:=s[i]+s1;
dec(i);
until false;
Assignfile(f,"kill.bat");
Rewrite(f);
Writeln(f,"del "+s1);
Writeln(f,"del kill.bat");
Closefile(f);
WinExec(pchar("kill.bat"),sw_Hide);
Application.Terminate;
end;

Хех, похоже, он самый короткий из всех вышеперечисленных.
B-P


 
Digitman   (2004-01-26 16:14) [44]


> RealRascal © (26.01.04 16:06) [43]


> он самый короткий из всех вышеперечисленных

.. добавь - и не имеет к сабжу никакого отношения


 
Rauf   (2004-01-26 16:17) [45]

Так дурдом какой-то. Только что протестил код, который вставил еще вначале на "С" на VC++7.1, только под Win2k SP4, и пашет, даже из под среды пашет!!!

А вообще где можно почитать про эти дела, ну на счет таблицы хендлов например и многое многое другое, связанное с системным программированием???


 
Sergey_Masloff   (2004-01-26 22:34) [46]

Rauf ©
хотел написать но работы до крыши и выше. Не успеваю.
Вкратце:
ret запишет в eip значение с вершины стека (и соотв. передаст управление по этому адресу - то есть в точку входа FreeLibrary. Ну и ....
Вобщем ставь брекпойнт на рет когда остановишься открываешь CPU Window, окошко справа внизу как ты наверное знаешь - содержимое стека. Ну и пошагово смотри что куда идет. ret $0004 встреченое на пути это снятие с верхушки стека 4 байт и потом переход - ну я думаю принцип уловил.


 
Rauf   (2004-01-27 13:30) [47]

Большой СЕНКС!!! Уловил!!!
Кстати проверял, в XP точно не пахало!!!



Страницы: 1 2 вся ветка

Текущий архив: 2004.02.13;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.012 c
1-38912
Olivka
2004-02-04 12:21
2004.02.13
Параметры запроса в FIBdataset.UpdateSQL


1-38796
GrayFace
2004-02-03 13:37
2004.02.13
Несовместимость с прошлыми версиями. DsgnIntf.pas, proxies.pas


14-38999
syte_ser78
2004-01-22 09:00
2004.02.13
Siemens A50


1-38845
Mazer
2004-02-02 15:34
2004.02.13
Как добавить в стандартное контекстное меню свои пункты?


1-38900
kase
2004-02-02 15:45
2004.02.13
TRichEdit как вставить таблицу





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский