精华内容
下载资源
问答
  • 进程退出删除自身EXE下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者.乃NT系统一等一的高手.下面就分析一些他的这段代码. 这段代码在PROCESS没有结束前就将启动PROCESS...

    进程退出前删除自身EXE

    下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者.NT系统一等一的高手.下面就分析一些他的这段代码.
    这段代码在PROCESS没有结束前就将启动PROCESSEXE文件删除了.

    int main(int argc, char *argv[])
    {
       HMODULE module = GetModuleHandle(0);
       CHAR buf[MAX_PATH];
       GetModuleFileName(module, buf, sizeof buf);
       CloseHandle(HANDLE(4));
       __asm {
           lea     eax, buf
           push    0
           push    0
           push    eax
           push    ExitProcess
           push    module
           push    DeleteFile
           push    UnmapViewOfFile
           ret
       }
       return 0;
    }
    现在,我们先看一下堆栈中的东西

    偏移 内容
    24   0
    20   0
    16   offset buf
    12   address of ExitProcess
    8    module
    4    address of DeleteFile
    0    address of UnmapViewOfFile

    调用RET返回到了UnmapViewOfFile,也就是栈里的偏移0所指的地方.当进入UnmapViewOfFile的流程时,栈里见到的是返回地址DeleteFileHMODUL module.也就是说调用完毕后返回到了DeleteFile的入口地址.当返回到DeleteFile,看到了ExitProcess的地址,也就是返回地址.和参数EAX,EAX则是buffer.buffer存的是EXE的文件名.GetModuleFileName(module, buf, sizeof buf)返回得到.执行了DeleteFile,就返回到了ExitProcess的函数入口.并且参数为0而返回地址也是0.0是个非法地址.如果返回到地址0则会出错.而调用ExitProcess则应该不会返回.
    这段代码的精妙之处在于:
    1.
    如果有文件的HANDLE打开,文件删除就会失败,所以,CloseHandle(HANDLE(4));是十分巧妙的一手.HANDLE4OS的硬编码,对应于EXEIMAGE.在缺省情况下,OS假定没有任何调用会关闭IMAGE SECTIONHANDLE,而现在,HANDLE被关闭了.删除文件就解除了文件对应的一个句柄.
    2.
    由于UnmapViewOfFile解除了另外一个对应IMAGEHANDLE,而且解除了IMAGE在内存的映射.所以,后面的任何代码都不可以引用IMAGE映射地址内的任何代码.否则就OS会报错.而现在的代码在UnmapViewOfFile后则刚好没有引用到任何IMAGE内的代码.
    3.
    ExitProcess之前,EXE文件就被删除了.也就是说,进程尚在,而主线程所在的EXE文件已经没了.(WINNT/9X都保护这些被映射到内存的WIN32 IMAGE不被删除.)

    Gary Nebbett
    果然是WIN系列平台的顶尖高手之一.能写出如此代码.独辟蹊径啊:) 

     

    展开全文
  • Lc.exe退出

    2019-08-08 12:05:27
    删除对应项目下的license.licx文件,重新生成项目即可解决。

    删除对应项目下的license.licx文件,重新生成项目即可解决。

    展开全文
  • 进程退出删除自身EXE

    千次阅读 2005-11-26 18:03:00
    下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE... 这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了. int main(int argc, char *argv[]) { HMODULE module = GetModu

    下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者.乃NT系统一等一的高手.下面就分析一些他的这段代码.
    这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了.
    int main(int argc, char *argv[])
    {
    HMODULE module = GetModuleHandle(0);
    CHAR buf[MAX_PATH];
    GetModuleFileName(module, buf, sizeof buf);
    CloseHandle(HANDLE(4));
    __asm {
    lea eax, buf
    push 0
    push 0
    push eax
    push ExitProcess
    push module
    push DeleteFile
    push UnmapViewOfFile
    ret
    }
    return 0;
    }
    现在,我们先看一下堆栈中的东西

    偏移 内容
    24 0
    20 0
    16 offset buf
    12 address of ExitProcess
    8 module
    4 address of DeleteFile
    0 address of UnmapViewOfFile

    调用RET返回到了UnmapViewOfFile,也就是栈里的偏移0所指的地方.当进入UnmapViewOfFile的流程时,栈里见到的是返回地址DeleteFile和HMODUL module.也就是说调用完毕后返回到了DeleteFile的入口地址.当返回到DeleteFile时,看到了ExitProcess的地址,也就是返回地址.和参数EAX,而EAX则是buffer.buffer存的是EXE的文件名.由GetModuleFileName(module, buf, sizeof buf)返回得到.执行了DeleteFile后,就返回到了ExitProcess的函数入口.并且参数为0而返回地址也是0.0是个非法地址.如果返回到地址0则会出错.而调用ExitProcess则应该不会返回.
    这段代码的精妙之处在于:
    1.如果有文件的HANDLE打开,文件删除就会失败,所以,CloseHandle(HANDLE(4));是十分巧妙的一手.HANDLE4是OS的硬编码,对应于EXE的IMAGE.在缺省情况下,OS假定没有任何调用会关闭IMAGE SECTION的HANDLE,而现在,该HANDLE被关闭了.删除文件就解除了文件对应的一个句柄.
    2.由于UnmapViewOfFile解除了另外一个对应IMAGE的HANDLE,而且解除了IMAGE在内存的映射.所以,后面的任何代码都不可以引用IMAGE映射地址内的任何代码.否则就OS会报错.而现在的代码在UnmapViewOfFile后则刚好没有引用到任何IMAGE内的代码.
    3.在ExitProcess之前,EXE文件就被删除了.也就是说,进程尚在,而主线程所在的EXE文件已经没了.(WINNT/9X都保护这些被映射到内存的WIN32 IMAGE不被删除.)

    展开全文
  • LC.exe退出,代码为-1

    2020-03-24 16:29:59
    有的时间,在项目中编辑运行以后,竟然...“LC.exe”已退出,代码为 -1。 怎么解决呢?下面给你方法: 因为证书的原因,把项目中“properties”目录下的“license.licx”文件删除,再编译就成功了。如图: ...

    转载自:https://jingyan.baidu.com/article/91f5db1bd0ace31c7f05e321.html

    有的时间,在项目中编辑运行以后,竟然出错了,错误提示就是:

    “LC.exe”已退出,代码为 -1

    怎么解决呢?下面给你方法:

    因为证书的原因,把项目中“properties”目录下的“license.licx”文件删除,再编译就成功了。如图:

     

    展开全文
  • 如何让进程退出删除自身EXE

    千次阅读 2009-05-18 11:31:00
    下面的代码由 Gary Nebbett 写就。Gary Nebbett 乃是 WINDOWS NT/2000 NATIVE API REFERENCE 的作者,NT 系统... 这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了。int main(int argc, char *argv[]) { H
  • 进程退出删除自身EXE程序

    千次阅读 2005-12-09 21:09:00
    下面的代码由Gary Nebbett写就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者... 这段代码在PROCESS没有结束前就将启动PROCESS的EXE文件删除了. int main(int argc, char *argv[]) { HMODULE module = G
  • “LC.exe”已退出,代码为 -1 1、删除 licenses.licx 文件及对其使用的即可。
  • “LC.exe”已退出,代码为 -1

    千次阅读 2015-08-12 12:47:14
    今天在Visual Studio 2010中编译代码的时候,遇到了下面这个错误:“LC.exe”已退出,代码为 -1 上网查看资料发现: 查看加载的程序项目,找到Properties文件夹licenses.licx文件,然后右键选择删除就可以了,调试...
  • 项目中使用了第三方组件, 需要证书,把项目中“properties”目录下的“license.licx”文件删除,再编译就OK
  • “LC.exe退出,代码为-1错误”;FreeTextBox
  • Lc.exe退出 代码为-1

    2017-09-02 22:09:00
    今天使用vs2010开发,有人在vss项目中增加了一个第三方组件,后来删除了,我的计算机上没有这个第三方组件,结果导致了LC.exe错误:"Lc.exe退出 代码为-1 " 解决方法: 1、把项目文件夹下Properties文件夹下...
  • 用vs的应该会经常碰到,Lc.exe退出 代码为-1的问题,解决方法也是非常简单,就是把Properties下的licenses.licx文件删除掉; 这样就可以正常运行了。
  • Lc.exe退出 代码为-1问题解决方法 原文地址,已根据第三个解决方案解决,特此收藏 在多人进行程序开发的过程中,可能由于版本问题,会导致“Lc.exe退出 代码为-1”问题的出现,如下图: END ...
  • 解决方法就是把Properties文件下的license.licx给删除,重新...在这里我们先来了解下“LC.exe退出,代码为-1”这个问题的原因及“LC.EXE”是什么东东。 LC.exe全称:NET Framework license compiler ,是NET Frame
  • 使用vs开发,有人在vs项目中增加了一个第三方组件,后来删除了,我的计算机上没有这个第三方组件,结果导致了LC.exe错误:"Lc.exe退出 代码为-1 ";;或者之前是老版本的Dev,现在换成新版的Dev,打开代码也会出现 ...
  • 一、删除 Properties 下的 .lis 文件 二、查找项目中,所有第三方控件 三、删除所有第三方控件和注册行 四、删除第三方控件引用 五、重新生成 六、在添加删除程序中,删除第三控件
  • lc.exe退出代码为-1 把项目中“properties”目录下的“license.licx”文件删除,再编译
  • 错误为Lc.exe退出,代码为-1 近来在做项目的时候,突然遇到 了 LC.exe退出,代码为-1 的提示,怎么也编译不了,在查了相关的资料后,终于明白了原因,其解决方案如下 : 以管理员的身份来运行vs, 并把项目中...
  • "Lc.exe退出 代码为-1

    万次阅读 2011-03-15 16:23:00
    "Lc.exe退出 代码为-1
  • Lc.exe退出,代码为-1

    2014-06-17 10:00:00
    Lc.exe退出,代码为-1" 。 解决办法: 意思就是把licenses.licx这个文件里的内容删除,但是文件还在(此时是个空文件),发生这个问题的原因主要是因为你可能引用了第三方控件但没有注册,删完后,重新编译就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 70,411
精华内容 28,164
关键字:

exe退出删除