C语言 查找内核数据结构的内存地址


内核

中有一个名为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中找到了它的地址

但正如我猜这个地址0xc04260c4zone_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

最新更新