中有一个名为zone_table
的数组,根据page_alloc.c
它是一个指向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]
的地址。对吗?
如果你有一个数组zone_t * zone_table[]
那么zone_table[x]
是*(zone_table+x)
的简写
但是在这种情况下+
是指针加法,所以它的zone_table + sizeof(zone_t *) * x
因为32 bit systems
sizeof(zone_t *)
确实是4
因为64 bit systems
sizeof(zone_t *)
是8
你的假设是正确的:
如果zone_table[0]
的地址是0xc04260c4
那么zone_table[1]
的地址就0xc04260c8