메모리에 액세스하고 읽기 위해 여러 명령을 사용할 수 있다는 것을 알고 있습니다. 예를 들어 print, p, x ...
하지만 GDB에서 디버깅하는 동안 특정 위치에서 메모리 내용을 어떻게 변경할 수 있습니까?
답변:
set (str[6]) = 'c'
과 같은 배열이있는 경우 작동합니다char str[]
Nikolai가 말했듯이 gdb 'set'명령을 사용하여 변수 값을 변경할 수 있습니다.
'set'명령을 사용하여 메모리 위치를 변경할 수도 있습니다. 예. Nikolai의 예에서 확장 :
(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
이것은 유효한 포인터에 대해 작동해야하며 적절한 데이터 유형으로 캐스트 될 수 있습니다.
set {char[100]}(0x00) = ""
주소 0x00
여기에 제공된 답변을 확장합니다.
set idx = 1
변수를 설정하기 위해 수행 할 수 있지만 변수 이름이 set 하위 명령과 충돌 할 수 있으므로 해당 구문은 권장되지 않습니다. 예를 들어 set w=1
유효하지 않습니다.
즉, 다음 구문을 선호해야합니다. set variable idx = 1
또는 set var idx = 1
.
마지막으로, 표현식을 평가하기 때문에 신뢰할 수있는 이전 인쇄 명령을 사용할 수 있습니다. 유일한 차이점은 식의 결과를 인쇄한다는 것입니다.
(gdb) p idx = 1
$1 = 1
여기에서 gdb에 대한 자세한 내용을 읽을 수 있습니다 .