2014-01-16 2 views
0

Существует массив в ядре называется 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

Если у вас есть массив zone_t * zone_table[] то zone_table[x] представляет собой сокращенную *(zone_table+x)

НО+ в этом случае является указателем дополнение, поэтому его zone_table + sizeof(zone_t *) * x

для 32 bit systemssizeof(zone_t *) действительно 4

для 64 bit systemssizeof(zone_t *) является 8

Ваше предположение было правильным:

если адрес zone_table[0] является 0xc04260c4

то адрес zone_table[1] является 0xc04260c8

 Смежные вопросы

  • Нет связанных вопросов^_^