2014-01-16 71 views
0

有根據page_alloc.c在內核的陣列稱爲zone_table它是指向zone_t(zone_struct)的數據結構的指針數組:查找存儲器地址

/* 
* 
* The zone_table array is used to look up the address of the 
* struct zone corresponding to a given zone number (ZONE_DMA, 
* ZONE_NORMAL, or ZONE_HIGHMEM). 
*/ 
zone_t *zone_table[MAX_NR_ZONES*MAX_NR_NODES]; 

,我發現它的地址從System.map

但我猜這個地址0xc04260c4是地址zone_table[0]

,但我需要的zone_table[1]

地址我不知道如何計算這個地址。我認爲在32 bit x86系統可能0xc04260c4應該被添加到0x4訪問地址zone_table[1]。這樣對嗎?

回答

1

如果你有一個數組zone_t * zone_table[]然後zone_table[x]是簡寫*(zone_table+x)

在這種情況下+是指針加法,所以其zone_table + sizeof(zone_t *) * x

32 bit systemssizeof(zone_t *)的確是4

64 bit systemssizeof(zone_t *)8

你的假設是正確的:

如果zone_table[0]地址爲0xc04260c4

那麼zone_table[1]地址是0xc04260c8