2014-01-16 74 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