Мое намерение состоит в том, чтобы прочитать значение переменной другого процесса (цели) из процесса (шпиона).Чтение std :: map <string, string> using ReadProcessMemory
Я начал с std :: map размером 2 в целевом процессе.
В процессе шпиона, а затем следующие шаги:
- Set UAC уровень выполнения, чтобы "requireAdministrator (/ уровень = 'requireAdministrator')"
- Enabled SE_DEBUG_NAME
- открыл целевой процесс
- Used ReadProcessMemory
И успешно прочитайте карту. Я проверил, что размер прочитанной карты равен 2. Но не смог оценить содержимое карты. Наблюдается, что каждая пара строк/значений строки оценивает ошибку в окне просмотра.
Чтобы подтвердить, что мои действия верны, я попробовал читать целочисленную переменную вместо карты. Значение целого может быть успешно восстановлено.
Любой совет, который помогает получить полное содержимое карты?
Возможно, существует несоответствие вашей реализации карты и целевого двоичного кода - более точно, если вы компилируете свое приложение в msvc 10, а целевое приложение было создано с использованием msvc 11, скорее всего, вы не сможете читать его напрямую. – szulak
Или любая другая реализация, если на то пошло. Существует несколько реализаций STL (RogueWave, STLPort, Dinkumware и т. Д.). То, что вы пытаетесь сделать, будет работать только в том случае, если вы знаете реализацию EXACT, которую фактически использует целевой процесс, и вы знаете EXACT-макет узлов для класса 'std :: map' этой конкретной реализации. Кроме того, вам также необходимо учитывать 32-битные и 64-разрядные различия. Поэтому то, что вы просите, невозможно/невозможно, если вы не контролируете как исполняемые файлы цели, так и шпиона (или у вас есть обратная конструкция цели). –
@RemyLebeau, Спасибо, да, я точно делаю это, на данный момент. – object