MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Программа запускается через раз 0xc0000005 C++"
Answer 921881
Программа некорректна как минимум в двух аспектах.
Программа пытается динамически создать в памяти кусок кода, но при этом не вызывает функцию FlushInstructionCache.
Нет гарантий, что в адресном пространстве любого процесса по заданному адресу
NtHeader->OptionalHeader.ImageBase
ОС сможет выделить непрерывный блок памяти нужного размера (вы даже не проверяете результат возврата VirtualAllocEx, чтобы узнать это). В современных версиях Windows действует Address space layout randomization, и предугадать, по какому адресу что будет загружено, невозможно.Я бы сказал, то, что вы пытаетесь сделать, не будет работать. Выгрузите бинарник во временный файл и создайте процесс с него, это единственная рабочая схема.
Если вас интересует, как избавиться от Access Violation и вместо этого корректно вернуть ошибку, посмотрите улучшенный вариант этого кода: https://github.com/Anon-65535/RunPE-Fixed-/blob/master/RunPE32_From_Memory.cpp
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.