关于 windows:C – WinAPI 的 ProcessCreation 问题

C - ProcessCreation Problems with WinAPI

本问题已经有最佳答案,请猛点这里访问。

我正在尝试将文件打开到文件缓冲区,然后用它创建一个新进程。我试图 ASM 转到文件的开头,但遗憾的是由于 windows 它实际上不会做任何事情,因为所有信息都在 windows 可执行文件的顶部。所以我尝试创建一个新进程,但我对 windows API 并不擅长。谁能告诉我我做错了什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <windows.h>
#include <WinBase.h>

char *file0_buffer;
int file0_size;

STARTUPINFO si;
PROCESS_INFORMATION pi;


int main(int argc, char **argv){

   ZeroMemory( &si, sizeof(si) );
   si.cb = sizeof(si);
   ZeroMemory( &pi, sizeof(pi) );

   FILE *file0 = fopen("./input.exe","rb");
   if(file0 == NULL){printf("fopen file0 error"); getchar(); return 0;}

   fseek(file0, 0, SEEK_END);
   file0_size = ftell(file0);
   rewind(file0);

   file0_buffer = (char*)malloc(file0_size);
   fread(file0_buffer, sizeof(char), file0_size, file0);
   fclose(file0);

   CreateProcess(NULL, NULL, NULL, NULL, TRUE, CREATE_DEFAULT_ERROR_MODE, &file0_buffer, NULL, &si, &pi);

   getchar(); return 0;
}


CreateProcess的第7个参数用于指定新进程中的环境变量。

看这个:从内存缓冲区创建进程