下面是小编整理的windows进程中的内存结构(共含4篇),希望能帮助到大家!同时,但愿您也能像本文投稿人“king889”一样,积极向本站投稿分享好文章。
windows进程中的内存结构
接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据,那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论。下文中的C语言代码如没有特别声明,默认都使用VC编译的release版。
首先,来了解一下 C 语言的变量是如何在内存分部的。C 语言有全局变量(Global)、本地变量(Local),静态变量(Static)、寄存器变量(Regeister)。每种变量都有不同的分配方式。先来看下面这段代码:
#include
int g1=0, g2=0, g3=0;
int main
{
static int s1=0, s2=0, s3=0;
int v1=0, v2=0, v3=0;
//打印出各个变量的内存地址
printf(“0x%08x\n”,&v1); //打印各本地变量的内存地址
printf(“0x%08x\n”,&v2);
printf(“0x%08x\n\n”,&v3);
printf(“0x%08x\n”,&g1); //打印各全局变量的内存地址
printf(“0x%08x\n”,&g2);
printf(“0x%08x\n\n”,&g3);
printf(“0x%08x\n”,&s1); //打印各静态变量的内存地址
printf(“0x%08x\n”,&s2);
printf(“0x%08x\n\n”,&s3);
return 0;
}
编译后的执行结果是:
0x0012ff78
0x0012ff7c
0x0012ff80
0x004068d0
0x004068d4
0x004068d8
0x004068dc
0x004068e0
0x004068e4
输出的结果就是变量的内存地址。其中v1,v2,v3是本地变量,g1,g2,g3是全局变量,s1,s2,s3是静态变量。你可以看到这些变量在内存是连续分布的,但是本地变量和全局变量分配的内存地址差了十万八千里,而全局变量和静态变量分配的内存是连续的。这是因为本地变量和全局/静态变量是分配在不同类型的内存区域中的结果。对于一个进程的内存空间而言,可以在逻辑上分成3个部份:代码区,静态数据区和动态数据区。动态数据区一般就是“堆栈”。“栈(stack)”和“堆(heap)”是两种不同的动态数据区,栈是一种线性结构,堆是一种链式结构。进程的每个线程都有私有的“栈”,所以每个线程虽然代码一样,但本地变量的数据都是互不干扰。一个堆栈可以通过“基地址”和“栈顶”地址来描述。全局变量和静态变量分配在静态数据区,本地变量分配在动态数据区,即堆栈中。程序通过堆栈的基地址和偏移量来访问本地变量。
├―――――――┤低端内存区域
│ …… │
├―――――――┤
│ 动态数据区 │
├―――――――┤
│ …… │
├―――――――┤
│ 代码区 │
├―――――――┤
│ 静态数据区 │
├―――――――┤
│ …… │
├―――――――┤高端内存区域
堆栈是一个先进后出的数据结构,栈顶地址总是小于等于栈的基地址。我们可以先了解一下函数调用的过程,以便对堆栈在程序中的作用有更深入的了解。不同的语言有不同的函数调用规定,这些因素有参数的压入规则和堆栈的平衡。windows API的调用规则和ANSI C的函数调用规则是不一样的,前者由被调函数调整堆栈,后者由调用者调整堆栈。两者通过“__stdcall”和“__cdecl”前缀区分。先看下面这段代码:
#include
void __stdcall func(int param1,int param2,int param3)
{
int var1=param1;
int var2=param2;
int var3=param3;
printf(“0x%08x\n”,¶m1); //打印出各个变量的内存地址
printf(“0x%08x\n”,¶m2);
printf(“0x%08x\n\n”,¶m3);
printf(“0x%08x\n”,&var1);
printf(“0x%08x\n”,&var2);
printf(“0x%08x\n\n”,&var3);
return;
}
int main()
{
func(1,2,3);
return 0;
}
编译后的执行结果是:
0x0012ff78
0x0012ff7c
0x0012ff80
0x0012ff68
0x0012ff6c
0x0012ff70
├―――――――┤<―函数执行时的栈顶(ESP)、低端内存区域
│ …… │
├―――――――┤
│ var 1 │
├―――――――┤
│ var 2 │
├―――――――┤
│ var 3 │
├―――――――┤
│ RET │
├―――――――┤<―“__cdecl”函数返回后的栈顶(ESP)
│ parameter 1 │
├―――――――┤
│ parameter 2 │
├―――――――┤
│ parameter 3 │
├―――――――┤<―“__stdcall”函数返回后的栈顶(ESP)
│ …… │
├―――――――┤<―栈底(基地址 EBP)、高端内存区域
上图就是函数调用过程中堆栈的样子了。首先,三个参数以从又到左的次序压入堆栈,先压“param3”,再压“param2”,最后压入“param1”;然后压入函数的返回地址(RET),接着跳转到函数地址接着执行(这里要补充一点,介绍UNIX下的缓冲溢出原理的文章中都提到在压入RET后,继续压入当前EBP,然后用当前ESP代替EBP。然而,有一篇介绍windows下函数调用的文章中说,在windows下的函数调用也有这一步骤,但根据我的实际调试,并未发现这一步,这还可以从param3和var1之间只有4字节的间隙这点看出来);第三步,将栈顶(ESP)减去一个数,为本地变量分配内存空间,上例中是减去12字节(ESP=ESP-3*4,每个int变量占用4个字节);接着就初始化本地变量的内存空间。由于“__stdcall”调用由被调函数调整堆栈,所以在函数返回前要恢复堆栈,先回收本地变量占用的内存(ESP=ESP+3*4),然后取出返回地址,填入EIP寄存器,回收先前压入参数占用的内存(ESP=ESP+3*4),继续执行调用者的代码。参见下列汇编代码:
;--------------func 函数的汇编代码-------------------
:00401000 83EC0C sub esp, 0000000C //创建本地变量的内存空间
:00401003 8B442410 mov eax, dword ptr [esp+10]
:00401007 8B4C2414 mov ecx, dword ptr [esp+14]
:0040100B 8B542418 mov edx, dword ptr [esp+18]
:0040100F 89442400 mov dword ptr [esp], eax
:00401013 8D442410 lea eax, dword ptr [esp+10]
:00401017 894C2404 mov dword ptr [esp+04], ecx
……………………(省略若干代码)
:00401075 83C43C add esp, 0000003C ;恢复堆栈,回收本地变量的内存空间
:00401078 C3 ret 000C ;函数返回,恢复参数占用的内存空间
;如果是“__cdecl”的话,这里是“ret”,堆栈将由调用者恢复
;-------------------函数结束-------------------------
;--------------主程序调用func函数的代码--------------
:00401080 6A03 push 00000003 //压入参数param3
:00401082 6A02 push 00000002 //压入参数param2
:00401084 6A01 push 00000001 //压入参数param1
:00401086 E875FFFFFF call 00401000 //调用func函数
;如果是“__cdecl”的话,将在这里恢复堆栈,“add esp, 0000000C”
聪明的读者看到这里,差不多就明白缓冲溢出的原理了。先来看下面的代码:
#include
#include
void __stdcall func()
{
char lpBuff[8]=“\0”;
strcat(lpBuff,“AAAAAAAAAAA”);
return;
}
int main()
{
func();
return 0;
}
编译后执行一下回怎么样?哈,““0x00414141”指令引用的“0x00000000”内存,
该内存不能为“read”。”,“非法操作”喽!“41”就是“A”的16进制的ASCII码了,那明显就是strcat这句出的问题了。“lpBuff”的大小只有8字节,算进结尾的'\0',那strcat最多只能写入7个“A”,但程序实际写入了11个“A”外加1个'\0'。再来看看上面那幅图,多出来的4个字节正好覆盖了RET的所在的内存空间,导致函数返回到一个错误的内存地址,执行了错误的指令。如果能精心构造这个字符串,使它分成三部分,前一部份仅仅是填充的无意义数据以达到溢出的目的,接着是一个覆盖RET的数据,紧接着是一段shellcode,那只要着个RET地址能指向这段shellcode的第一个指令,那函数返回时就能执行shellcode了。但是软件的不同版本和不同的运行环境都可能影响这段shellcode在内存中的位置,那么要构造这个RET是十分困难的。一般都在RET和shellcode之间填充大量的NOP指令,使得exploit有更强的通用性。
├―――――――┤<―低端内存区域
│ …… │
├―――――――┤<―由exploit填入数据的开始
│ │
│ buffer │<―填入无用的数据
│ │
├―――――――┤
│ RET │<―指向shellcode,或NOP指令的范围
├―――――――┤
│ NOP │
│ …… │<―填入的NOP指令,是RET可指向的范围
│ NOP │
├―――――――┤
│ │
│ shellcode │
│ │
├―――――――┤<―由exploit填入数据的结束
│ …… │
├―――――――┤<―高端内存区域
windows下的动态数据除了可存放在栈中,还可以存放在堆中。了解C++的朋友都知道,C++可以使用new关键字来动态分配内存。来看下面的C++代码:
#include
#include
#include
void func()
{
char *buffer=new char[128];
char bufflocal[128];
static char buffstatic[128];
printf(“0x%08x\n”,buffer); //打印堆中变量的内存地址
printf(“0x%08x\n”,bufflocal); //打印本地变量的内存地址
printf(“0x%08x\n”,buffstatic); //打印静态变量的内存地址
}
void main()
{
func();
return;
}
程序执行结果为:
0x004107d0
0x0012ff04
0x004068c0
可以发现用new关键字分配的内存即不在栈中,也不在静态数据区。VC编译器是通过windows下的“堆(heap)”来实现new关键字的内存动态分配。在讲“堆”之前,先来了解一下和“堆”有关的几个API函数:
HeapAlloc 在堆中申请内存空间
HeapCreate 创建一个新的堆对象
HeapDestroy 销毁一个堆对象
HeapFree 释放申请的内存
HeapWalk 枚举堆对象的所有内存块
GetProcessHeap 取得进程的默认堆对象
GetProcessHeaps 取得进程所有的堆对象
LocalAlloc
GlobalAlloc
当进程初始化时,系统会自动为进程创建一个默认堆,这个堆默认所占内存的大小为1M。堆对象由系统进行管理,它在内存中以链式结构存在。通过下面的代码可以通过堆动态申请内存空间:
HANDLE hHeap=GetProcessHeap();
char *buff=HeapAlloc(hHeap,0,8);
其中hHeap是堆对象的句柄,buff是指向申请的内存空间的地址。那这个hHeap究竟是什么呢?它的值有什么意义吗?看看下面这段代码吧:
#pragma comment(linker,“/entry:main”) //定义程序的入口
#include
_CRTIMP int (__cdecl *printf)(const char *, ...); //定义STL函数printf
/*---------------------------------------------------------------------------
写到这里,我们顺便来复习一下前面所讲的知识:
(*注)printf函数是C语言的标准函数库中函数,VC的标准函数库由msvcrt.dll模块实现。
由函数定义可见,printf的参数个数是可变的,函数内部无法预先知道调用者压入的参数个数,函数只能通过分析第一个参数字符串的格式来获得压入参数的信息,由于这里参数的个数是动态的,所以必须由调用者来平衡堆栈,这里便使用了__cdecl调用规则。BTW,Windows系统的API函数基本上是__stdcall调用形式,只有一个API例外,那就是wsprintf,它使用__cdecl调用规则,同printf函数一样,这是由于它的参数个数是可变的缘故。
---------------------------------------------------------------------------*/
void main()
{
HANDLE hHeap=GetProcessHeap();
char *buff=HeapAlloc(hHeap,0,0x10);
char *buff2=HeapAlloc(hHeap,0,0x10);
HMODULE hMsvcrt=LoadLibrary(“msvcrt.dll”);
printf=(void *)GetProcAddress(hMsvcrt,“printf”);
printf(“0x%08x\n”,hHeap);
printf(“0x%08x\n”,buff);
printf(“0x%08x\n\n”,buff2);
}
执行结果为:
0x00130000
0x00133100
0x00133118
hHeap的值怎么和那个buff的值那么接近呢?其实hHeap这个句柄就是指向HEAP首部的地址。在进程的用户区存着一个叫PEB(进程环境块)的结构,这个结构中存放着一些有关进程的重要信息,其中在PEB首地址偏移0x18处存放的ProcessHeap就是进程默认堆的地址,而偏移0x90处存放了指向进程所有堆的地址列表的指针。windows有很多API都使用进程的默认堆来存放动态数据,如windows 下的所有ANSI版本的函数都是在默认堆中申请内存来转换ANSI字符串到Unicode字符串的。对一个堆的访问是顺序进行的,同一时刻只能有一个线程访问堆中的数据,当多个线程同时有访问要求时,只能排队等待,这样便造成程序执行效率下降。
最后来说说内存中的数据对齐。所位数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍,DWORD数据的内存起始地址能被4除尽,WORD数据的内存起始地址能被2除尽,x86 CPU能直接访问对齐的数据,当他试图访问一个未对齐的数据时,会在内部进行一系列的调整,这些调整对于程序来说是透明的,但是会降低运行速度,所以编译器在编译程序时会尽量保证数据对齐。同样一段代码,我们来看看用VC、Dev-C++和lcc三个不同编译器编译出来的程序的执行结果:
#include
int main()
{
int a;
char b;
int c;
printf(“0x%08x\n”,&a);
printf(“0x%08x\n”,&b);
printf(“0x%08x\n”,&c);
return 0;
}
这是用VC编译后的执行结果:
0x0012ff7c
0x0012ff7b
0x0012ff80
变量在内存中的顺序:b(1字节)-a(4字节)-c(4字节)。
这是用Dev-C++编译后的执行结果:
0x0022ff7c
0x0022ff7b
0x0022ff74
变量在内存中的顺序:c(4字节)-中间相隔3字节-b(占1字节)-a(4字节)。
这是用lcc编译后的执行结果:
0x0012ff6c
0x0012ff6b
0x0012ff64
变量在内存中的顺序:同上。
三个编译器都做到了数据对齐,但是后两个编译器显然没VC“聪明”,让一个char占了4字节,浪费内存哦。
基础知识:
堆栈是一种简单的数据结构,是一种只允许在其一端进行插入或删除的线性表。允许插入或删除操作的一端称为栈顶,另一端称为栈底,对堆栈的插入和删除操作被称为入栈和出栈。有一组CPU指令可以实现对进程的内存实现堆栈访问。其中,POP指令实现出栈操作,PUSH指令实现入栈操作。CPU的ESP寄存器存放当前线程的栈顶指针,EBP寄存器中保存当前线程的栈底指针。CPU的EIP寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。
参考:《Windows下的HEAP溢出及其利用》by: isno
《windows核心编程》by: Jeffrey Richter
主要理解了Linux进程的栈和函数的栈帧的区别和联系
<?www.2cto.com/kf/ware/vc/“ target=”_blank“ class=”keylink“>vcD4KCgoKyc/NvNbQv8y7rbXEysfSu7j2TGludXi9+LPMtcS94bm5zbyjrMbk1tCxvs7Ez+vSqrnY16K1xNW7yOfJz828y/nKvsrH1bu119TaMHhjMDAwMDAwMLXY1re13bz1tcTSu7/pvfizzMTatObH+NPyCkxpbnV4z7XNs9bQzqrDv7j2vfizzLfWxeS1xMq1vMq089ChzrTX9snuvr8KTGludXi9+LPMtcTVu7XE1fvM5cjP1qq+zcrH1eLDtLbgo6y8tAoxo6nVu7XX1NoweGMwMDAwMDAwo6iyorK70OjSqtW7tdfWuNXro6y6r8r9tcTVu9ahssXQ6NKq1bu119a41eujqQoyo6nVu7XE1PazpLe9z/KjrLXY1re13bz1t73P8gozo6nVu7al1rjV62VzcAo0o6m089ChzrTWqqOosrvKx7G+zsS52NeitcTW2LXjo6kKNaOpwO/D5rTmt8W1xMTayN3Kx8qyw7TE2KO/Cjxicj4KCr34s8y1xNW71tC05rfFtcTKx7qvyv2199PDtcTVu9ahCjxicj4KCry0we3Su7j2uMXE7srHyc/OxNbQzOG1vbXEuq/K/bXE1bvWobXEuMXE7rywxuTT60xpbnV4vfizzNW7tcS52M+1Crqvyv21xNW71qG+zdTavfizzNbQtcTVu7XEveG5ubrNt9bF5LXEtdjWt7/VvOS8sMq1vMrE2rTm1tAKuq/K/bXE1bvWodX7zOW1xMDtveLKx6O6CjGjqWVicMrHuq/K/dW71qG1xNW7tdcKMqOpZXNwysfVu7alo6jSu7j2uq/K/bXEu+62r7zHwry+zdTaZWJwKLjftdjWtym6zWVzcCi1zbXY1rcp1q685KOpCjOjqdK7uPa9+LPMtcTL+dPQtcS6r8r9tcTVu9ah1Nq199PDtMu6r8r9tcTKsbryvajBoqOst7W72LX308PV37rzo6yxu7X3uq/K/bXE1bvWobK71Nm05tTaCjSjqcv509C1xLqvyv21xNW71qG1xL2owaK6zc/7yqfKx8vm18W9+LPMtcTWtNDQtvix5LuvtcTSu7j2tq/MrLn9s8wKNaOp1bvWodbQtOa3xbXExNrI3crHyrLDtMTYo78KPGltZyBzcmM9”www.2cto.com/uploadfile/Collfiles/0306/2015030609524682.png“ alt=”\“>
栈帧中存放的内容一般包括以下几个方面的内容:1)函数的返回地址和参数2)临时变量:包括函数的非静态局部变量和编译器自动生成的其他变量3)保存的上下文:包括在函数调用前后需要保证不变的寄存器值进程中的函数在进程提供的栈中要解决的是调用者和被调者的关系1)如何从调用者进入被调者?call2)如何从被调者返回调用者?ret3)调用者如何支配被调者(被调函数参数传递)?参数4)被调者的价值如何体现(返回值的传递)?寄存器eax、edx
其中还有两个问题值得去看1)被调函数返回值的传递方式2)函数的调用惯例作者:liujian0616 字体:[增加 减小] 类型:
这篇文章主要介绍了python实现在windows服务中新建进程的方法,涉及Python针对Windows服务与进程操作的相关技巧,需要的朋友可以参考下
本文实例讲述了python实现在windows服务中新建进程的方法,分享给大家供大家参考。具体实现方法如下:
需要安装的软件:python和pywin32,我这里装的分别是python-2.6.amd64、pywin32-217.win-amd64-py2.6
文件名:dma_ws.py
#!pythonimport win32serviceutil import win32service import win32eventimport os from subprocess import Popen, PIPEimport jsonimport signalrun_proc = Noneclass DMA_WS(win32serviceutil.ServiceFramework): _svc_name_ = ”DMA_WS“ _svc_display_name_ = ”DMA_WS“ def __init__(self, args): win32serviceutil.ServiceFramework.__init__(self, args) self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) def SvcDoRun(self): f = file(‘C:/DXMonitorSystem/dma.conf‘) host = json.load(f) f.close dxsrv = os.path.join(host[‘app_path‘], ‘DXHttpServer.py‘) run_proc = Popen([host[‘ironpython‘], dxsrv],stdin=PIPE, stdout=PIPE, stderr=PIPE, shell=False,cwd=host[‘app_path‘])#这里新建进程,注意cwd参数必不可少且要是绝对路径 #res, err = run_proc.communicate() #这个函数内的上面部分都是逻辑处理的部分,可以根据自己的需求订制,但下面这行代码任何服务都需要 win32event.WaitForSingleObject(self.hWaitStop, win32event.INFINITE) run_proc.kill() # 用于关闭服务所创建的子进程 #os.kill(run_proc.pid, signal.SIGTERM)if __name__==‘__main__‘: win32serviceutil.HandleCommandLine(DMA_WS)
使用方法:
创建服务:Python dma_ws.py install
开始服务:python dma_ws.py start
停止服务:python dma_ws.py stop
希望本文所述对大家的Python程序设计有所帮助,
(1)[system Idle Process]
进程文件: [system process] or [system process]
进程名称: Windows内存处理系统进程
描 述: Windows页面内存管理进程,拥有0级优先,
介 绍:该进程作为单线程运行在每个处理器上,并在系统不处理其他线程的时候分派处理器的时间。它的cpu占用率越大表示可供分配的CPU资源越多,数字越小则表示CPU资源紧张。
(2)[alg.exe]
进程文件: alg or alg.exe
进程名称: 应用层网关服务
描 述: 这是一个应用层网关服务用于网络共享。
介 绍:一个网关通信插件的管理器,为 “Internet连接共享服务”和 “Internet连接防火墙服务”提供第三方协议插件的支持。
(3)[csrss.exe]
进程文件: csrss or csrss.exe
进程名称: Client/Server Runtime Server Subsystem
描 述: 客户端服务子系统,用以控制Windows图形相关子系统。
介 绍: 这个是用户模式Win32子系统的一部分。csrss代表客户/服务器运行子系统而且是一个基本的子系统必须一直运行。csrss用于维持Windows的控制,创建或者删除线程和一些16位的虚拟MS-DOS环境。
(4)[ddhelp.exe]
进程文件: ddhelp or ddhelp.exe
进程名称: DirectDraw Helper
描 述: DirectDraw Helper是DirectX这个用于图形服务的一个组成部分。
简 介:Directx 帮助程序
(5)[dllhost.exe]
进程文件: dllhost or dllhost.exe
进程名称: DCOM DLL Host进程
描 述: DCOM DLL Host进程支持基于COM对象支持DLL以运行Windows程序。
介 绍:com代理,系统附加的dll组件越多,则dllhost占用的cpu资源和内存资源就越多。
(6)[explorer.exe]
进程文件: explorer or explorer.exe
进程名称: 程序管理
描 述: Windows Program Manager或者Windows Explorer用于控制Windows图形Shell,包括开始菜单、任务栏,桌面和文件管理。
介 绍:这是一个用户的shell,在我们看起来就像任务条,桌面等等。或者说它就是资源管理器,不相信你在运行里执行它看看。它对windows系统的稳定性还是比较重要的。
(7)[inetinfo.exe]
进程文件: inetinfo or inetinfo.exe
进程名称: IIS Admin Service Helper
描 述: InetInfo是Microsoft Internet Infomation Services (IIS)的一部分,用于Debug调试除错。
介绍:IIS服务进程。
(8)[internat.exe]
进程文件: internat or internat.exe
进程名称: Input Locales
描 述: 这个输入控制图标用于更改类似国家设置、键盘类型和日期格式。internat.exe在启动的时候开始运行。它加载由用户指定的不同的输入点。输入点是从注册表的这个位置HKEY_USERS\\.DEFAULT\\Keyboard Layout\\Preload 加载内容的。internat.exe 加载“EN”图标进入系统的图标区,允许使用者可以很容易的转换不同的输入点。当进程停掉的时候,图标就会消失,但是输入点仍然可以通过控制面板来改变。
介 绍:它主要是用来控制输入法的,当你的任务栏没有“EN”图标,而系统有internat.exe进程,不妨结束掉该进程,在运行里执行internat命令即可。
1楼希望wsg(6级)17:05|回复
(9)[kernel32.dll]
进程文件: kernel32 or kernel32.dll
进程名称: Windows壳进程
描 述: Windows壳进程用于管理多线程、内存和资源。
(10)[lsass.exe]
进程文件: lsass or lsass.exe
进程名称: 本地安全权限服务
描 述: 这个本地安全权限服务控制Windows安全机制。管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全驱动程序等。
介 绍:这是一个本地的安全授权服务,并且它会为使用winlogon服务的授权用户生成一个进程。这个进程是通过使用授权的包,例如默认的msgina.dll来执行的。如果授权是成功的,lsass就会产生用户的进入令牌,令牌别使用启动初始的shell。其他的由用户初始化的进程会继承这个令牌的。而windows活动目录远程堆栈溢出漏洞,正是利用LDAP 3搜索请求功能对用户提交请求缺少正确缓冲区边界检查,构建超过1000个\”AND\“的请求,并发送给服务器,导致触发堆栈溢出,使Lsass.exe服务崩溃,系统在30秒内重新启动。
(11)[mdm.exe]
进程文件: mdm or mdm.exe
进程名称: Machine Debug Manager
描 述: Debug除错管理用于调试应用程序和Microsoft Office中的Microsoft Script. Editor脚本编辑器。
介 绍:Mdm.exe的主要工作是针对应用软件进行排错(Debug),说到这里,扯点题外话,如果你在系统见到fff开头的0字节文件,它们就是mdm.exe在排错过程中产生一些暂存文件,这些文件在操作系统进行关机时没有自动被清除,所以这些fff开头的怪文件里是一些后缀名为CHK的文件都是没有用的垃圾文件,可匀我馍境??换岫韵低巢??涣加跋臁6?X系统,只要系统中有Mdm.exe存在,就有可能产生以fff开头的怪文件。可以按下面的方法让系统停止运行Mdm.exe来彻底删除以fff开头的怪文件:首先按“Ctrl+Alt+Del”组合键,在弹出的“关闭程序”窗口中选中“Mdm”,按“结束任务”按钮来停止Mdm.exe在后台的运行,接着把Mdm.exe(在C:\\Windows\\System目录下)改名为Mdm.bak。运行msconfig程序,在启动页中取消对“Machine Debug Manager”的选择。这样可以不让Mdm.exe自启动,然后点击“确定”按钮,结束msconfig程序,并重新启动电脑。另外,如果你使用IE 5.X以上版本浏览器,建议禁用脚本调用(点击“工具→Internet选项→高级→禁用脚本调用”),这样就可以避免以fff开头的怪文件再次产生。
(12)[mmtask.tsk]
进程文件: mmtask or mmtask.tsk
进程名称: 多媒体支持进程
描 述: 这个Windows多媒体后台程序控制多媒体服务,例如MIDI。
介 绍:这是一个任务调度服务,负责用户事先决定在某一时间运行的任务的运行。
(13)[mprexe.exe]
进程文件: mprexe or mprexe.exe
进程名称: Windows路由进程
描 述: Windows路由进程包括向适当的网络部分发出网络请求。
介 绍:这是Windows的32位网络界面服务进程文件,网络客户端部件启动的核心。
(14)[msgsrv32.exe]
进程文件: msgsrv32 or msgsrv32.exe
进程名称: Windows信使服务
描 述: Windows信使服务调用Windows驱动和程序管理在启动。
介 绍:msgsrv32.exe 一个管理信息窗口的应用程序,win9x下如果声卡或者显卡驱动程序配置不正确,会导致死机或者提示msgsrv32.exe 出错。
(15)[mstask.exe]
进程文件: mstask or mstask.exe
进程名称: Windows计划任务
描 述: Windows计划任务用于设定继承在什么时间或者什么日期备份或者运行,
介 绍:计划任务,它通过注册表自启动。因此,通过计划任务程序实现自启动的程序在系统信息中看不到它的文件名,一旦把它从注册表中删除或禁用,那么通过计划任务启动的程序全部不能自动运行。win9X下系统启动就会开启计划任务,可以通过双击计划任务图标-高级-终止计划任务来停止它自启动。
2楼希望wsg(6级)17:05|回复
(16)[regsvc.exe]
进程文件: regsvc or regsvc.exe
进程名称: 远程注册表服务
描 述: 远程注册表服务用于访问在远程计算机的注册表。
(17)[rpcss.exe]
进程文件: rpcss or rpcss.exe
进程名称: RPC Portmapper
描 述: Windows 的RPC端口映射进程处理RPC调用(远程模块调用)然后把它们映射给指定的服务提供者。
介 绍:98它不是在装载解释器时或引导时启动,如果使用中有问题,可以直接在在注册表HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\RunServices添加\”字符串值\“,定向到\”C:\\WINDOWS\\SYSTEM\\RPCSS\"即可。
(18)[services.exe]
进程文件: services or services.exe
进程名称: Windows Service Controller
描 述: 管理Windows服务。
介 绍:大多数的系统核心模式进程是作为系统进程在运行。打开管理工具中的服务,可以看到有很多服务都是在调用%systemroot%\\system32\\service.exe
(19)[smss.exe]
进程文件: smss or smss.exe
进程名称: Session Manager Subsystem
描 述: 该进程为会话管理子系统用以初始化系统变量,MS-DOS驱动名称类似LPT1以及COM,调用Win32壳子系统和运行在Windows登陆过程。
简 介:这是一个会话管理子系统,负责启动用户会话。这个进程是通过系统进程初始化的并且对许多活动的,包括已经正在运行的Winlogon,Win32(Csrss.exe)线程和设定的系统变量作出反映。在它启动这些进程后,它等待Winlogon或者Csrss结束。如果这些过程时正常的,系统就关掉了。如果发生了什么不可预料的事情,smss.exe就会让系统停止响应(就是挂起)。
(20)[snmp.exe]
进程文件: snmp or snmp.exe
进程名称: Microsoft SNMP Agent
描 述: Windows简单的网络协议代理(SNMP)用于监听和发送请求到适当的网络部分。
简 介:负责接收SNMP请求报文,根据要求发送响应报文并处理与WinsockAPI的接口。
(21)[spool32.exe]
进程文件: spool32 or spool32.exe
进程名称: Printer Spooler
描 述: Windows打印任务控制程序,用以打印机就绪。
(22)[spoolsv.exe]
进程文件: spoolsv or spoolsv.exe
进程名称: Printer Spooler Service
描 述: Windows打印任务控制程序,用以打印机就绪。
介 绍:缓冲(spooler)服务是管理缓冲池中的打印和传真作业。
(23)[stisvc.exe]
进程文件: stisvc or stisvc.exe
进程名称: Still Image Service
描 述: Still Image Service用于控制扫描仪和数码相机连接在Windows。
(24)[svchost.exe]
进程文件: svchost or svchost.exe
进程名称: Service Host Process
描 述: Service Host Process是一个标准的动态连接库主机处理服务.
介 绍:Svchost.exe文件对那些从动态连接库中运行的服务来说是一个普通的主机进程名。Svhost.exe文件定位在系统的%systemroot%\\system32文件夹下。在启动的时候,Svchost.exe检查注册表中的位置来构建需要加载的服务列表。这就会使多个Svchost.exe在同一时间运行。每个Svchost.exe的回话期间都包含一组服务,以至于单独的服务必须依靠Svchost.exe怎样和在那里启动。这样就更加容易控制和查找错误。windows 2k一般有2个svchost进程,一个是RPCSS(Remote Procedure Call)服务进程,另外一个则是由很多服务共享的一个svchost.exe。而在windows XP中,则一般有4个以上的svchost.exe服务进程,windows 2003 server中则更多。
3楼希望wsg(6级)17:07|回复
(25)[taskmon.exe]
进程文件: taskmon or taskmon.exe
进程名称: Windows Task Optimizer
描 述: windows任务优化器监视你使用某个程序的频率,并且通过加载那些经常使用的程序来整理优化硬盘。
介 绍:任务管理器,它的功能是监视程序的执行情况并随时报告。能够监测所有在任务栏中以窗口方式运行的程序,可打开和结束程序,还可直接调出关闭系统对话框。
(26)[tcpsvcs.exe]
进程文件: tcpsvcs or tcpsvcs.exe
进程名称: TCP/IP Services
描 述: TCP/IP Services Application支持透过TCP/IP连接局域网和Internet。
(27)[winlogon.exe]
进程文件: winlogon or winlogon.exe
进程名称: Windows Logon Process
描 述: Windows NT用户登陆程序。这个进程是管理用户登录和退出的。而且winlogon在用户按下CTRL+ALT+DEL时就激活了,显示安全对话框。
(28)[winmgmt.exe]
进程文件: winmgmt or winmgmt.exe
进程名称: Windows Management Service
描 述: Windows Management Service透过Windows Management Instrumentation data WMI)技术处理来自应用客户端的请求。
简 介:winmgmt是win2000客户端管理的核心组件。当客户端应用程序连接或当管理程序需要他本身的服务时这个进程初始化。WinMgmt.exe(CIM对象管理器)和知识库(Repository)是WMI两个主要构成部分,其中知识库是对象定义的数据库,它是存储所有可管理静态数据的中心数据库,对象管理器负责处理知识库中对象的收集和操作并从WMI提供程序收集信息。WinMgmt.exe在Windows 2k/NT上作为一个服务运行,而在Windows 95/98上作为一个独立的exe程序运行。Windows 2k系统在某些计算机上出现的WMI错误可以通过安装Windows 2k SP2来修正。
(29)[system]
进程文件: system or system
进程名称: Windows System Process
描 述: Microsoft Windows系统进程。
介 绍:在任务管理器中会看到这项进程,属于正常系统进程。
系统进程就介绍到这里。
在Windows2k/XP中,以下进程是必须加载的:
smss.exe、csrss.exe、winlogon.exe、services.exe、lsass.exe、svchost.exe(可以同时存在多个)、spoolsv.exe、explorer.exe、System Idle Process;
在Windows 9x中,一下进程是必须加载的:
msgsrv32.exe、mprexe.exe、mmtask.tsk、kenrel32.dll
★ 温柔内存抒情散文
★ 中动结构的界定
★ 提升进程范文