繁体   English   中英

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

[英]Finding memory address of a kernel data structure

根据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找到了它的地址

但是我猜这个地址0xc04260c4zone_table[0]地址。

但我需要zone_table[1]地址

我不知道如何计算这个地址。 我认为在32 bit x86系统中,也许应该将0xc04260c4添加到0x4来访问zone_table[1]地址。 这样对吗?

如果您有一个数组zone_t * zone_table[]zone_table[x]*(zone_table+x)简写。

在这种情况下, BUT +是指针加法,因此其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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM