Jak modyfikować zawartość pamięci za pomocą GDB?


Odpowiedzi:


124

Najłatwiej jest ustawić zmienną programu (patrz GDB: przypisanie ):

Lub możesz po prostu zaktualizować dowolną (zapisywalną) lokalizację według adresu:

Jest więcej. Przeczytaj instrukcję .


4
Muszę ustawić zmienną programu PRZED uzyskaniem dostępu do dowolnych lokalizacji pamięci? Czy nie mogę od razu uruchomić drugiego polecenia set?
Spidey

set (str[6]) = 'c'działa również, jeśli masz tablicę, na przykładchar str[]
xealits

30

Jak powiedział Nikolai, możesz użyć polecenia gdb 'set', aby zmienić wartość zmiennej.

Możesz także użyć polecenia „set”, aby zmienić lokalizacje pamięci. na przykład. Rozwijając przykład Mikołaja:

Powinno to działać dla każdego prawidłowego wskaźnika i może być rzutowane na dowolny odpowiedni typ danych.


set {char[100]}(0x00) = ""Czyści 100 bajtów pamięci pod adresem 0x00
davenpcj

16

Poszerzanie odpowiedzi udzielonych tutaj.

Możesz po prostu set idx = 1ustawić zmienną, ale ta składnia nie jest zalecana, ponieważ nazwa zmiennej może kolidować z poleceniem podrzędnym set. Jako przykład set w=1nie byłby ważny.

Oznacza to, że powinieneś preferować składnię: set variable idx = 1lub set var idx = 1.

Wreszcie, możesz po prostu użyć swojego zaufanego starego polecenia drukowania, ponieważ ocenia ono wyrażenie. Jedyną różnicą jest to, że drukuje również wynik wyrażenia.

Możesz przeczytać więcej o gdb tutaj .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.