根据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]
来访问{{1}}的地址。是不是?
答案 0 :(得分: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