摘要载入中…    请稍等…












内容载入中…    请稍等…

如长时间看不到内容,请关闭浏览器,重新打开此页!

芯友首页 应用软件 编程开发 网络硬件 资源下载 动漫音乐 精美图库 芯友论坛 视频教程 电脑技术QQ群:72845454
 ★★photoshop学友-史上最强播放器★★
 位置:编程开发>Deiphi>Deiphi系统文件
◎→ 本类最新
得到Windows用户名和序列号
在DELPHI中映射网络驱动器
在Delphi中实现对目录拷贝、删除
在Delphi中接受文件拖放
在Delphi中定位文件位置
用代码打开屏幕保护
用Delphi编程得到OS的类型
◎→相关资源
C语言入门视频教程
C#编程WinForm入门视频
Asp.net入门视频教程下载
VC++编程视频教程下载
VB窗体文章
HTML入门教程
Deiphi实例教程
Deiphi窗体文章
Deiphi数据库编程
Deiphi网络编程
Deiphi图形图象文章
Deiphi系统文件
◎→ 热门资源
Listview中实现点击栏目标题排序
Microsoft Agent技术在Delphi中的
MIDAS中动态强制约束编程
Chuck Jazdzewski的离开意味着De
COM程序编写入门(三)
OICQ中用户图标选择的实现
DELPHI中利用对象的常用属性制作

程序删除自身


日期:2008-10-20 22:01:37    来源:
   
 ·COM程序编写入门(三) ·添加删除Internet网关发现控制客户端

程序删除自身


program Project1;

uses

Windows;

procedure DeleteSelf;

var

hModule: THandle;

buff: array[0..255] of Char;

hKernel32: THandle;

pExitProcess, pDeleteFileA, pUnmapViewOfFile: Pointer;

begin

hModule := GetModuleHandle(nil);

GetModuleFileName(hModule, buff, sizeof(buff));

CloseHandle(THandle(4));

hKernel32 := GetModuleHandle('KERNEL32');

pExitProcess := GetProcAddress(hKernel32, 'ExitProcess');

pDeleteFileA := GetProcAddress(hKernel32, 'DeleteFileA');

pUnmapViewOfFile := GetProcAddress(hKernel32, 'UnmapViewOfFile');

asm

LEA EAX, buff

PUSH 0

PUSH 0

PUSH EAX

PUSH pExitProcess

PUSH hModule

PUSH pDeleteFileA

PUSH pUnmapViewOfFile

RET

end;

end;

begin

DeleteSelf;

end.  



现在有一点比较古怪,那就是必须把代码放在一个Procedure里,

直接放在begin ... end.中间是不行的。也许是全局变量不能使用

的缘故,但为什么不能使用,还是不是很清楚。

还有,不GetProcAddress,直接如下写:

PUSH OFFSET UnmapViewOfFile

trace的结果是执行进入了KERNEL32.UnmapViewOfFile的,只是在

函数内RET $4出就出错了,跳到了一个莫名其妙的地方。为什么会

这样?难道是Delphi的编译器的问题吗?

另外,Borland论坛上RE的代码不是上面的,不过效果跟我写的一样

。但是FreeLibrary(p)跟UnmapViewOfFile(hModule)效果一样吗?

代码如下:


program Project1;

uses

windows;

procedure DeleteSelf;

var

module : HMODULE;

buf : array [ 0 .. MAX_PATH - 1 ] of char;

p : ULONG;

hKrnl32 : HMODULE;

pExitProcess, pDeleteFile, pFreeLibrary : pointer;

begin

module := GetModuleHandle ( nil );

GetModuleFileName ( module, buf, sizeof ( buf ) );

CloseHandle ( THandle ( 4 ) );

p := ULONG ( module ) + 1;

//上面这一句什么意思?


hKrnl32 := GetModuleHandle ( 'kernel32' );

pExitProcess := GetProcAddress ( hKrnl32, 'ExitProcess' );

pDeleteFile := GetProcAddress ( hKrnl32, 'DeleteFileA' );

pFreeLibrary := GetProcAddress ( hKrnl32, 'FreeLibrary' );

asm

lea eax, buf

push 0

push 0

push eax

push pExitProcess

push p

push pDeleteFile

push pFreeLibrary

ret

end;

end;

 [1]

InstallShield Express制作Delphi数据库安装程序

安装或删除外部PCL软字体

--->uTorrent V1.70 Build 1825 Beta┊很小巧的BT客户端程序┊多国语言绿色免费版
--->AlbumUp V0.39┊综合相册批量上传程序、支持网易163相册┊简体中文绿色免费版
--->AlbumCon V0.70┊综合型相册批量下载程序、支持网易相册┊简体中文绿色免费版
--->PATmonitorTrial V1.9.3 f┊是全能的专利下载和专利管理程序┊汉化绿色特别版
--->Azureus V3.0.0.8 Final For Win┊基于JAVA的BT下载程序┊多国语言绿色免费版
Tags:  程序 删除
{$enumber$}
芯友网版权所有 1999-2006 | 著作权与商标声明 | 法律声明 | 服务条款 | 隐私声明 | 联系我们