выполнение программы из массива байтов на c

#c

Вопрос:

привет, у меня есть вопрос

У меня есть программа на C , которая отображает «привет, мир».

Я преобразовал это в байты, а затем поместил в файл заголовка в своей основной программе. Как мне нужно передать свою программу в память?

Мой код:

 #include lt;windows.hgt; #include lt;vectorgt; #include "Bytes.h"  std::vectorlt;unsigned chargt; data{ //my bytes };  void main() { void* pe = data.data();  IMAGE_DOS_HEADER* DOSHeader; IMAGE_NT_HEADERS64* NtHeader; IMAGE_SECTION_HEADER* SectionHeader;  PROCESS_INFORMATION PI; STARTUPINFOA SI; ZeroMemory(amp;PI, sizeof(PI)); ZeroMemory(amp;SI, sizeof(SI));  void* pImageBase; char currentFilePath[1024];  DOSHeader = PIMAGE_DOS_HEADER(pe); NtHeader = PIMAGE_NT_HEADERS64(DWORD64(pe)   DOSHeader-gt;e_lfanew);  if (NtHeader-gt;Signature == IMAGE_NT_SIGNATURE) {  GetModuleFileNameA(NULL, currentFilePath, MAX_PATH);   if (CreateProcessA(currentFilePath, NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, amp;SI, amp;PI)) {  CONTEXT* CTX;  CTX = LPCONTEXT(VirtualAlloc(NULL, sizeof(CTX), MEM_COMMIT, PAGE_READWRITE));  CTX-gt;ContextFlags = CONTEXT_FULL;  UINT64 imageBase = 0;   if (GetThreadContext(PI.hThread, LPCONTEXT(CTX))) {  pImageBase = VirtualAllocEx(  PI.hProcess,  LPVOID(NtHeader-gt;OptionalHeader.ImageBase),  NtHeader-gt;OptionalHeader.SizeOfImage,  MEM_COMMIT | MEM_RESERVE,  PAGE_EXECUTE_READWRITE  );   WriteProcessMemory(PI.hProcess, pImageBase, pe, NtHeader-gt;OptionalHeader.SizeOfHeaders, NULL);   for (size_t i = 0; i lt; NtHeader-gt;FileHeader.NumberOfSections; i  )  {  SectionHeader = PIMAGE_SECTION_HEADER(DWORD64(pe)   DOSHeader-gt;e_lfanew   264   (i * 40));   WriteProcessMemory(  PI.hProcess,  LPVOID(DWORD64(pImageBase)   SectionHeader-gt;VirtualAddress),  LPVOID(DWORD64(pe)   SectionHeader-gt;PointerToRawData),  SectionHeader-gt;SizeOfRawData,  NULL  );  WriteProcessMemory(  PI.hProcess,  LPVOID(CTX-gt;Rdx   0x10),  LPVOID(amp;NtHeader-gt;OptionalHeader.ImageBase),  8,  NULL  );  }   CTX-gt;Rcx = DWORD64(pImageBase)   NtHeader-gt;OptionalHeader.AddressOfEntryPoint;  SetThreadContext(PI.hThread, LPCONTEXT(CTX));  ResumeThread(PI.hThread);  WaitForSingleObject(PI.hProcess, NULL);  }  } }  

}

Это то, что у меня есть сейчас, но это дает мне ошибку, говоря :

Возникло исключение: нарушение доступа для чтения. Досье было nullptr.