Как использовать VirtualAllocEx освободить место для пещеры кода? - PullRequest
3 голосов
/ 10 июня 2010

Как использовать VirtualAllocEx, чтобы освободить место для кодовой пещеры ? В настоящее время у меня есть часть программного обеспечения с очень небольшим «свободным пространством», и я прочитал, что VirtualAllocEx используется для создания этого пространства ..

Ответы [ 2 ]

2 голосов
/ 10 июня 2010

После того, как вопрос о «пещере кода» снят, вы можете найти интересный следующий код, который перечисляет блоки, выделенные VirtualAllocEx в текущем процессе, и находит все PE (DLL и сам EXE).

Код может выглядеть как большой цикл.В действительности это типичное приложение, которое делает около 200 циклов, поэтому очень быстро проходит через все блоки, выделенные с учетом VirtualAllocEx, во время загрузки EXE всех всех зависимых DLL.

2 голосов
/ 10 июня 2010
#include <stdio.h>
#include <windows.h>
#include <commctrl.h>   

unsigned long pid;
HANDLE process;
GetWindowThreadProcessId(listview, &pid);
process = OpenProcess(PROCESS_VM_OPERATION|PROCESS_VM_READ | PROCESS_VM_WRITE|PROCESS_QUERY_INFORMATION, FALSE, pid);

int *vptr = (int *)VirtualAllocEx(process, NULL, sizeof(int), MEM_COMMIT, PAGE_READWRITE);

Ссылки
- MSDN Функция VirtualAllocEx
- CodeProject Кража памяти программы
- StackOver Что такое код пещеры ...?

НТН,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...