出自計組第三次上機附加題第二題
用gdb運作程式b,輸出中相應位址究竟指向了什麼?
請貼上你是如何找到的(使用了什麼gdb指令等等)

在檢視位址前首先需要斷點定位到需要檢視的位置
顯示代碼内容
(gdb) l
在第八行設定斷點
(gdb) break 8
運作
(gdb) run
将會在斷點處停下
Starting program: /Users/xujiaxing/Downloads/lab3_補充題目/b/b/b
[New Thread 0x1e03 of process 905]
warning: unhandled dyld version (15)
Thread 2 hit Breakpoint 1, main () at b.c:8
8 printf(format, &magic);
接下來就要檢視記憶體了
gdb中檢視記憶體的方法總結:
使用examine指令(簡寫是x)來檢視記憶體位址中的值。x指令的文法如下:
x/<n/f/u><addr>
n、f、u是可選的參數。
n 是一個正整數, 表示顯示記憶體的長度 ,也就是說從目前位址向後顯示幾個位址的内容。
f 表示顯示的格式 ,參見上面。如果位址所指的是 字元串 ,那麼格式可以是 s ,如果 位址是指令 位址 ,那麼格式可以是 i 。
u 表示從目前位址往後請求的位元組數,如果不指定的話,GDB預設是4個bytes 。 u 參數可以用下面的字元來代替, b 表示單位元組, h 表示雙位元組, w 表示四字 節, g 表示八位元組。當我們指定了位元組長度後, GDB 會從指記憶體定的記憶體位址開始,讀寫指定位元組,并把其當作一個值取出來。
<addr>表示一個記憶體位址。
n/f/u三個參數可以一起使用。例如:
指令: x/3uh 0x54320 表示,從記憶體位址 0x54320讀取内容, h表示以雙位元組為一個機關, 3表示三個機關, u表示按十六進制顯示。
輸出格式
一般來說,GDB會根據變量的類型輸出變量的值。但你也可以自定義GDB的輸出的格式。例如,你想輸出一個整數的十六進制,或是二進制來檢視這個整型變量的中的位的情況。要做到這樣,你可以使用GDB的資料顯示格式:
x 按十六進制格式顯示變量。
d按十進制格式顯示變量。
u按十六進制格式顯示無符号整型。
o按八進制格式顯示變量。
t按二進制格式顯示變量。
a按十六進制格式顯示變量。
c按字元格式顯示變量。
f按浮點數格式顯示變量。
是以檢視十進制位址的方法即為:
(gdb) x/9db 0x00001fa4
從記憶體位址0x00001fa4讀取内容,b表示以單位元組為一個機關,9表示九個機關,d表示按十進制顯示。
還有另外一種方法是直接print,由于0xBFFFFAA0是指針的指針所指向的位址,是以檢視其内容即為
(gdb) p/d**(char**) [email protected]
從記憶體位址0xBFFFFAA0讀取内容,d表示以十進制顯示,@9表示讀取一片連續的長度為9的位址