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

时间:2014-01-16 07:39:36

标签: c arrays kernel 32-bit memory-address

根据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]来访问{{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