int age= 20;
int *p_age = &age;
nslog(@"p_age = %p", p_age); //輸出指標變數p_age指向值20所在記憶體的位址
nslog(@"&p_age = %p", &p_age); //輸出指標變數p_age本身的位址
2017-07-19 15:54:07.048 test0719[27387:858079] p_age =0x7fff5313f65c
2017-07-19 15:54:07.050 test0719[27387:858079] &p_age = 0x7fff5313f650
能不能通過位址0x7fff5313f65c
和0x7fff5313f650
檢視記憶體位址中的值?
如何去驗證:0x7fff5313f650
記憶體位址的值是:0x7fff5313f65c
,而0x7fff5313f65c
記憶體位址的值是20
?
2017-07-19
16:06:54.160 test0719[27514:863331] p_age = 0x7fff5c8d965c
2017-07-19
16:06:54.162 test0719[27514:863331] &p_age = 0x7fff5c8d9650
(lldb) x/d 0x7fff5c8d965c
//檢視0x7fff5c8d965c記憶體位址的值,並以十進位制方式輸出。
0x7fff5c8d965c: 20
//輸出結果是20
(lldb) x/x 0x7fff5c8d9650
//檢視0x7fff5c8d9650記憶體位址的值,並以十六進製制方式輸出。
0x7fff5c8d9650: 0x5c8d965c
//輸出結果是乙個4位元組大小的類似指標位址的值,而指標變數型別大小應該是8個位元組
(lldb) x/g 0x7fff5c8d9650
//所以,這裡使用g引數來表示位元組8個位元組,重新輸出8個位元組的記憶體位址的值
0x7fff5c8d9650: 0x00007fff5c8d965c
//8個位元組大小的記憶體位址的值,它是乙個位址
(lldb) x/d 0x00007fff5c8d965c
//檢視0x00007fff5c8d965c 記憶體位址的值,並以十進位制方式輸出。
0x7fff5c8d965c: 6669152202784768020
//因為,不指定輸出位元組大小,預設應該輸出4個位元組記憶體大小,所以其值非常大
(lldb) x/1db 0x00007fff5c8d965c
//所以,調整為輸出1個位元組的記憶體大小的值,並以十進位制方式輸出
0x7fff5c8d965c: 20
x/
n、f、u是可選的引數。
n
是乙個正整數,表示需要顯示的記憶體單元的個數,也就是說從當前位址向後顯示幾個記憶體單元的內容,乙個記憶體單元的大小由後面的u定義。
f
表示顯示的格式,參見下面。如果位址所指的是字串,那麼格式可以是s,如果地十是指令位址,那麼格式可以是i。
u
表示從當前位址往後請求的位元組數,如果不指定的話,gdb預設是4個bytes。u引數可以用下面的字元來代替,b表示單位元組,h表示雙位元組,w表示四字 節,g表示八字節。當我們指定了位元組長度後,gdb會從指記憶體定的記憶體位址開始,讀寫指定位元組,並把其當作乙個值取出來。
一般來說,gdb會根據變數的型別輸出變數的值。但你也可以自定義gdb的輸出的格式。例如,你想輸出乙個整數的十六進製制,或是二進位制來檢視這個整型變數的中的位的情況。要做到這樣,你可以使用gdb的資料顯示格式:
x
按十六進製制格式顯示變數。
d
按十進位制格式顯示變數。
u
按十六進製制格式顯示無符號整型。
o
按八進位制格式顯示變數。
t
按二進位制格式顯示變數。
a
按十六進製制格式顯示變數。
c
按字元格式顯示變數。
f
按浮點數格式顯示變數。
Linux程式除錯 記憶體位址對齊
改編自 一,記憶體位址對齊的概念 計算機記憶體中排列 訪問資料的一種方式,包含基本資料對齊和結構體資料對齊。32位系統中,資料匯流排寬度為32,每次能夠讀取4位元組資料。位址匯流排為32,最大定址空間為4gb。但是由於最低位a 0 a 1 是不用於定址的,因此只能訪問4的倍數的位址空間,但是定址空間...
GDB檢視指定記憶體位址處的內容
命令格式 x nfu如 gdb x 1xb 0x7fffffffd708 x examine 的縮寫 n 表示要顯示的記憶體單元個數 f 表示顯示方式,可取如下值 x 按十六進製制格式顯示變數。d 按十進位制格式顯示變數。u 按十進位制格式顯示無符號整型。o 按八進位制格式顯示變數。t 按二進位制格...
記憶體位址分配
inti 1 intj 1 cout i endl j endl 2 函式引數列表的存放方式是,先對最右邊的形參分配位址,後對最左邊的形參分配位址。3 little endian模式的cpu對運算元的存放方式是從低位元組到高位元組的 0x1234的存放方式入下 0x4000 0x34 0x4001 ...