创建进程除了用 CREATE_NEW_CONSOLE,还可以用挂起的方式创建,CREATE_SUSPENDED
// TestCreateSuspended.cpp : Defines the entry point for the console application.
// 挂起方式创建进程
#include "stdafx.h"
#include <WINDOWS.H>
int main(int argc, char* argv[])
{
// 挂起方式创建进程
STARTUPINFO si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi;
char szPath[MAX_PATH] = "c:\\notepad.exe";
CreateProcess(NULL, szPath, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
// 获取线程上下文
CONTEXT context;
context.ContextFlags = CONTEXT_FULL;
GetThreadContext(pi.hThread, &context);
// 获取入口点
DWORD dwEntryPoint = context.Eax;
printf("入口点: %x\n", dwEntryPoint);
// 获取ImageBase
char *baseAddress = (char *)context.Ebx + 8;
char szBuffer[256] = {0};
ReadProcessMemory(pi.hProcess, baseAddress, szBuffer, 4, NULL);
// 恢复线程
ResumeThread(pi.hThread);
getchar();
return 0;
}
运行结果

本文介绍了使用CREATE_SUSPENDED标志挂起方式创建进程的方法,通过C++代码示例展示了如何获取新进程的入口点及ImageBase地址,并演示了如何恢复挂起的进程。文章深入解析了进程创建的细节,对于理解Windows环境下进程管理和调试具有重要意义。
680

被折叠的 条评论
为什么被折叠?



