进程提供程序所需的资源,如:数据、代码等等。
进程就相当于一个房子,房子里有什么东西,都是由进程提供,但房子里的人,使用这些资源的人称线程。
进程是空间上的概念,静止不动的。
分区 | x86 32位Windows |
---|---|
空指针赋值区 | 0x00000000 - 0x0000FFFF |
用户模式区 | 0x00010000 - 0x7FFEFFFF |
64KB禁入区 | 0x7FFF0000 - 0x7FFFFFFF |
内核 | 0x80000000 - 0xFFFFFFFF |
每个进程的内核时同一份,只有其他三个时进程独有的
<1> 在OD中查看进程所包含的模块。
<2> 每个模块都是一个可执行文件,遵守相同的格式,即PE结构。
<1> 任何进程都是别的进程创建的:CreateProcess()
<2> 进程的创建过程
1、映射EXE文件 2、创建内核对象EPROCESS 3、映射系统DLL(ntdll.dll) 4、创建线程内核对象ETHREAD 5、系统启动线程 映射DLL(ntdll.LdrInitializeThunk) 线程开始执行
c# include <Windows.h> int main() { //创建进程的函数,CreateProcess SECURITY_ATTRIBUTES psa = {sizeof(psa)}; //进程安全描述符,需要初始化 SECURITY_ATTRIBUTES tsa = {sizeof(tsa)}; //线程安全描述符,需要初始化 STARTUPINFO si = {sizeof(si)}; //指定新进程的主窗口特性的一个结构,需要初始化 PROCESS_INFORMATION pi; BOOL bflag = CreateProcess(L"C:\\Users\\ayong\\Desktop\\GifCam.exe", NULL, &psa, &tsa, FALSE, 0, NULL, NULL, &si, &pi); return 0; }
c//m_ExePath 编辑框变量名 //创建按钮 void CMy10MFCCreateProcessDlg::OnBnClickedButton1() { UpdateData(TRUE); //创建进程的函数,CreateProcess SECURITY_ATTRIBUTES psa = { sizeof(psa) }; //需要初始化 SECURITY_ATTRIBUTES tsa = { sizeof(tsa) }; //需要初始化 STARTUPINFO si = { sizeof(si) }; //需要初始化 PROCESS_INFORMATION pi; CreateProcess(m_ExePath, NULL, &psa, &tsa, FALSE, 0, NULL, NULL, &si, &pi); UpdateData(FALSE); }
本文作者:Na1r
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!