Как использовать WriteProcessMemory (WPM) для замены строк? - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь написать простой код для замены строки в программе другой, использующей WPM, и я могу заставить ее работать, но только частично.Это часть кода, который я использовал для получения результата.

string strWrite;
cin >> strWrite;
strWrite = strWrite + "\0";
if (WriteProcessMemory(hProcess, (LPVOID) reqdAddr, &strWrite[0], strWrite.size(), NULL) == false)
    {
        cout << "WriteProcessMemory failed. GetLastError = " << dec << GetLastError() << endl;
        system("pause");
        return EXIT_FAILURE;
    }

Когда я пытаюсь заменить исходную строку DefaultString на blabla, я получаю результат blablatString.Я пробовал что-то вроде замены strWrite.size() на strWrite.size() + 1 и понял, что результат меняется на blabla String.Мне нужна помощь в замене всей строки, а не только ее части.

1 Ответ

0 голосов
/ 30 мая 2018

Если (как это имеет место) целевая строка сохраняется как std :: string, тогда этот подход не будет работать.Они имеют внутреннюю структуру, к которой программисты не должны относиться (если вы не копаетесь в заголовочном файле), и код, который у вас там, не учитывает это.И даже если вы это сделаете, следующая версия компилятора, вероятно, сломает ваш код.

Поэтому рассмотрите вместо этого (если можете) сохранение целевой строки в виде простой строки Си.Перезаписать его тогда просто, если вы не выбежали до конца и добавили завершающий нуль.Я бы сделал это явно - не думайте, что исходная строка завершается нулем, это может быть не так.Или используйте std::string.c_str() и скопируйте из него size() + 1 байт.

...