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:
(gdb) l
6 {
7int i;
8structfile *f, *ftmp;9
(gdb) set variable i = 10
(gdb) p i
$1 = 10
(gdb) p &i
$2 = (int *) 0xbfbb0000
(gdb) set *((int *) 0xbfbb0000) = 20
(gdb) p i
$3 = 20
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.
Odpowiedzi:
Najłatwiej jest ustawić zmienną programu (patrz GDB: przypisanie ):
(gdb) l 6 { 7 int i; 8 struct file *f, *ftmp; 9 (gdb) set variable i = 10 (gdb) p i $1 = 10
Lub możesz po prostu zaktualizować dowolną (zapisywalną) lokalizację według adresu:
(gdb) set {int}0x83040 = 4
Jest więcej. Przeczytaj instrukcję .
źródło
set (str[6]) = 'c'
działa również, jeśli masz tablicę, na przykładchar str[]
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:
(gdb) l 6 { 7 int i; 8 struct file *f, *ftmp; 9 (gdb) set variable i = 10 (gdb) p i $1 = 10 (gdb) p &i $2 = (int *) 0xbfbb0000 (gdb) set *((int *) 0xbfbb0000) = 20 (gdb) p i $3 = 20
Powinno to działać dla każdego prawidłowego wskaźnika i może być rzutowane na dowolny odpowiedni typ danych.
źródło
set {char[100]}(0x00) = ""
Czyści 100 bajtów pamięci pod adresem 0x00Poszerzanie odpowiedzi udzielonych tutaj.
Możesz po prostu
set idx = 1
ustawić zmienną, ale ta składnia nie jest zalecana, ponieważ nazwa zmiennej może kolidować z poleceniem podrzędnym set. Jako przykładset w=1
nie byłby ważny.Oznacza to, że powinieneś preferować składnię:
set variable idx = 1
lubset 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.
(gdb) p idx = 1 $1 = 1
Możesz przeczytać więcej o gdb tutaj .
źródło