2021-02-23
Win32
0
请注意,本文编写于 767 天前,最后修改于 327 天前,其中某些信息可能已经过时。

目录

1. 什么是进程?

进程提供程序所需的资源,如:数据、代码等等。

进程就相当于一个房子,房子里有什么东西,都是由进程提供,但房子里的人,使用这些资源的人称线程。

进程是空间上的概念,静止不动的。

2. 进程内存空间的地址划分

分区x86 32位Windows
空指针赋值区0x00000000 - 0x0000FFFF
用户模式区0x00010000 - 0x7FFEFFFF
64KB禁入区0x7FFF0000 - 0x7FFFFFFF
内核0x80000000 - 0xFFFFFFFF

每个进程的内核时同一份,只有其他三个时进程独有的

3. 进程的组成部分:模块

<1> 在OD中查看进程所包含的模块。

<2> 每个模块都是一个可执行文件,遵守相同的格式,即PE结构。

4. 进程的创建

<1> 任何进程都是别的进程创建的:CreateProcess()

<2> 进程的创建过程

1、映射EXE文件
2、创建内核对象EPROCESS
3、映射系统DLL(ntdll.dll)
4、创建线程内核对象ETHREAD
5、系统启动线程
	映射DLL(ntdll.LdrInitializeThunk)
	线程开始执行

5. 控制台创建进程

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;
}

6. MFC创建进程

MFC创建进程

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 许可协议。转载请注明出处!