麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Delphi > 正文

Self-Delete程序之Delphi版本,終于搞定了。

2019-11-18 18:43:37
字體:
來源:轉載
供稿:網友
  //轉貼者:以前看過陸麟先生翻譯過一篇這樣的文章,是c版本的,我用delphi改寫了沒成功,今天去清華bbs轉悠看見了這篇delphi版本的,特貼出來

發信人: Litoad (Rick), 信區: Delphi

標  題: Self-Delete程序之Delphi版本,終于搞定了。 (轉載)

發信站: BBS 水木清華站 (Mon Jun  4 20:51:55 2001)

【 以下文字轉載自 PRogramming 討論區 】

發信人: Litoad (Rick), 信區: Programming

標  題: Self-Delete程序之Delphi版本,終于搞定了。

發信站: BBS 水木清華站 (Mon Jun  4 20:50:42 2001)

到Borland的論壇去問了問,確實跟laoduan說得一樣,要

自己GetProcAddress。代碼如下:

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;


上一篇:於Delphi的Case述句中使用字串當作判別變數

下一篇:詳細教你如何使用delphi中thread的線程編程

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
學習交流
熱門圖片

新聞熱點

疑難解答

圖片精選

網友關注

主站蜘蛛池模板: 日本欧美一区二区三区视频麻豆 | xxxxxx打针视频vk| 中文字幕网在线 | 国产色视频免费 | www.99av| 7777久久香蕉成人影院 | 涩涩99| 国产免费让你躁在线视频 | 久久精品影视 | 亚洲精品久久久久久下一站 | 欧美日韩亚洲在线观看 | 日韩精品hd | 日本欧美视频 | 免费在线成人网 | 香蕉成人在线观看 | 久草在线新时代视觉 | 国产乱淫av | av在线一区二区三区四区 | 亚洲天堂ww | 天天干天天透 | 国产一区二区三区四区五区精品 | 久久精品视频一区二区三区 | 操碰网 | 免费看一级视频 | 中文字幕免费一区 | 国产在线看一区 | 日本精品中文字幕 | 7777在线视频免费播放 | 国产精品久久久久久久久久三级 | 欧美大屁股精品毛片视频 | 性爱视频在线免费 | 精品久久久久久国产三级 | 日韩黄色av网站 | 精品成人网 | 精品成人免费视频 | 国产88久久久国产精品免费二区 | 国产精品视频二区不卡 | 久久久久久久久久久久久久av | 国产日韩在线观看一区 | av在线一区二区三区四区 | 中文字幕综合在线观看 |