进程

一、什么是进程

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

二、进程内存空间的地址划分

在这里插入图片描述

三、进程的组成部分:模块

在OD中查看进程所包含的模块。
每个模块都是一个可执行文件,遵守相同的格式,即PE结构

四、进程的创建:

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

进程的创建过程

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

五、创建一个子进程

1、定义一个创建子进程的函数CreateProcess,需要两个参数,一个要运行的程序路径,一个是命令行参数(命令行参数可以为空)

BOOL CreateProcess(PTCHAR route,PTCHAR szCommandLine)
{
}

2、定义两个结构体,因为下面判断创建子进程是否成功,根据返回句柄和id来进行判断

	定义两个结构体
	STARTUPINFO si;
	PROCESS_INFORMATION pi ;

	//初始化结构体
	ZeroMemory(&pi,sizeof(pi));
	ZeroMemory(&si,sizeof(si));
	
	//si结构体的cb 必须要赋值
	si.cb = sizeof(si);

3、判断创建子进程是否成功,如果没成功打印错误编号

//创建子程序  返回成功与失败
	if(!CreateProcess(
		route,				//打开程序的路径
		szCommandLine,		//命令行参数
		NULL,
		NULL,
		FALSE,
		0,
		NULL,
		NULL,
		&si,				//创建子进程的详细信息(只需要赋值大下,其余可以不用管)
		&pi)				//存储的是进程ID,线程ID,进程句柄,线程句柄
		)
	{//打印错误信息
		printf("Error:%d\n",GetLastError());
		return FALSE;	
	}

4、释放句柄

	释放句柄
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);
	return TRUE;

5、调用函数

int main(int argc, char* argv[])
{
	
	TCHAR route[] = TEXT("C://Program Files//Tools//DTDebug//DTDebug.exe");
	
	CreateProcess(route,NULL);	//程序路径,命令行参数
	return 0;
}

6、完整代码

#include "stdafx.h"
#include "windows.h"

//打开子进程函数
BOOL CreateProcess(PTCHAR route,PTCHAR szCommandLine)
{
	//定义两个结构体
	STARTUPINFO si;
	PROCESS_INFORMATION pi ;

	//初始化结构体
	ZeroMemory(&pi,sizeof(pi));
	ZeroMemory(&si,sizeof(si));
	
	//si结构体的cb 必须要赋值
	si.cb = sizeof(si);

	//创建子程序  返回成功与失败
	if(!CreateProcess(
		route,				//打开程序的路径
		szCommandLine,		//命令行参数
		NULL,
		NULL,
		FALSE,
		0,
		NULL,
		NULL,
		&si,				//创建子进程的详细信息
		&pi)				//存储的是进程ID,线程ID,进程句柄,线程句柄
		)
	{//打印错误信息
		printf("Error:%d\n",GetLastError());
		return FALSE;	
	}
	
	//释放句柄
	CloseHandle(pi.hProcess);
	CloseHandle(pi.hThread);
	return TRUE;
}


int main(int argc, char* argv[])
{
	
	TCHAR route[] = TEXT("C://Program Files//Tools//DTDebug//DTDebug.exe");
	//TCHAR szCmdLine[] = TEXT("https://www.ifeng.com");
	
	CreateProcess(route,NULL);	//程序路径,命令行参数
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值