在DPR文件里面有这样一段汇编代码,可以实现隐藏进程的作用,可否请大家替我分析一下这段代码。
Application.Initialize;
asm
mov ebx,30h
push es
push fs
pop es
mov ebx,es:[ebx]
pop es
mov eax,10800000h
xchg [ebx+20h],eax
end;
Application.CreateForm(TForm1,Form1);
Application.Run;
end.
另外,这个程序一旦运行之后,小弟试过很多方法,均无法将其中止,请各位高手赐教,如何才能终止其运行。不胜感谢。

解决方案 »

  1.   

    Study 不过有点疑惑 , 这时候用的栈应该是 Delphi 编译分配的为何还会无法终止 ?
      

  2.   

    hch_45:
     你把表单关了之后,实际上它并没有被关闭,只是隐藏了而已,你在WINDOWS优化大师的进程察看器里可以看到。
      

  3.   

    首先这段代码只在Win9X中有效fs是80386后增加的附加数据段寄存器,按照栈后进先出的方式,将fs传递给附加段es,后面再次出栈是未改变前es的数据,既恢复寄存器es状态mov ebx,es:[ebx],这是一种带段跨越前缀的直接寻址方式,将其中的数据传递给寄存器ebx,结合下面的xchg [ebx+20h],eax交换数据,其实质就是将附加数据段fs中特定位置的值改为10800000h因为在Win9X中按下Ctrl+Alt+Del后,如果不存在可见窗体,会检查fs中特定位置的值是否是10800000h,如果是就不在进程序列表中显示该进程