Как написать память dll? - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь заменить конкретную строку в памяти принадлежит DLL.Вот код.

Я могу прочитать его, и он дает мне правильный результат, но при написании VC ++ показывает «Место записи нарушения доступа».

HMODULE HMODULE1 = LoadLibrary(L"my.dll");

std::string x1(8, '\0');
std::string x2 = "CIFCDMEY";
auto startPos = (void*)((char*)(HMODULE1)+0x1158A0 + 9);
// Correct, I can read the memory
memcpy_s((void*)x1.data(), x1.size(), startPos, x1.size());
// Access violation writing location
memcpy_s(startPos, x2.size(), x2.data(), x2.size());


auto handle = GetCurrentProcess();
SIZE_T num;
auto ret = WriteProcessMemory(handle, startPos, x2.data(), x2.size(), &num);
auto lastError1 = GetLastError();
LPVOID lpMessageBuffer1 = NULL;
size_t size1 = ::FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
    NULL,
    lastError1,
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    (LPTSTR)&lpMessageBuffer1,
    0,
    NULL);
std::wstring errorMessage1;
if (size1 > 0) {
    // errorMessage1: Invalid access to memory location.
    errorMessage1 = std::wstring((LPCTSTR)lpMessageBuffer1, size1);
}

В окне «Просмотр»,значение переменной startPos равно my.dll!0x0f2a58a9 (load symbols for additional information).

Я знаю, что люди используют 'WriteProcessMemory' для записи памяти процесса, как насчет DLL?

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