Можно ли с помощью WinDbg изменить элемент в памяти во время выполнения процесса? - PullRequest
2 голосов
/ 02 октября 2008

Могу ли я, используя адрес, найденный в файле карты, использовать windbg для изменения переменной в памяти во время работы приложения?

Мне действительно интересно включить / выключить функциональность во время выполнения, возможно, с помощью переменной.

Как бы вы это сделали? Требуется ли взломать приложение через отладчик?

Ответы [ 5 ]

4 голосов
/ 02 октября 2008

Если у вас есть адрес, вы можете использовать любую из команд e * (Ввести значение).

Вы можете присоединиться к любому запущенному процессу, если знаете идентификатор процесса, или вы можете запустить exe-файл напрямую с помощью cdb. Вы должны прервать процесс, чтобы внести какие-либо изменения. В CDB вы можете использовать Ctrl + C, и он вставит DebugBreak в процесс, затем вы можете посмотреть на стек, потоки и память.

1 голос
/ 06 марта 2012

Вы можете установить точку останова, которая будет нажата только один раз, отредактировать значение и продолжить выполнение. Что-то вроде:

bp /1 012ABCDEF "myVar=42;g"

замените вышеприведенное значение своим адресом и именем переменной.

1 голос
/ 23 декабря 2010

Я только что сделал это. Предполагая, что вы сопоставили символы и находитесь в точке останова, где вы можете видеть переменную, вы просто делаете это - предполагая, что «myvar» является целым числом:

?? MyVar [[это показывает текущее содержание]]

?? MyVar = 55 [[это изменит значение myvar на 55]]

?? MyVar [[это покажет обновленное содержимое моего var - что 55]]

г [[ваша программа будет запущена, и следующее чтение myvar даст 55]]

0 голосов
/ 02 октября 2008

Вы можете определенно сделать это. Либо разбейте функцию и отредактируйте ее в окне локальных пользователей. Или используйте команды e для редактирования значений. За дополнительной информацией обращайтесь к справке windbg.

0 голосов
/ 02 октября 2008

Я не уверен, что именно вы пытаетесь достичь, но отладчик должен быть активирован для какого-то события (исключение, точка останова или что-то), после того, как он активирован, например, вы можете иметь поток, который создает исключение, и после контроль обратно проверить переменную.
В отладчике вы можете установить точку останова командой, см. это руководство , что изменит параметр.
Я надеюсь, что это ответ на ваш вопрос, если нет, пожалуйста, уточните вопрос.

В случае точки останова с помощью команды приложение будет прервано и продолжит выполнение без вмешательства человека, я не знаю, каким образом отладчик может что-то сделать без остановки приложения.

Просто мысль, вы уверены, что вам нужен отладчик для этого? Разве вы не можете просто использовать реестр для этого и использовать this , чтобы получать уведомления об изменении реестра.

...