Чтение структуры 32-битных указателей в 64-битном процессоре

Передача 32-битных указателей в определенной структуре на новый 64-битный процессор ARM

Попытка чтения из устаревшего кода, который использует структуру 32-битных указателей, созданных в 32-битном процессоре, на другом оборудовании, которое передается в общей области памяти с 64-битным процессором с использованием 64-битных указателей.

struct _32bit_addr_ptr 
{
 unsigned int *addr1;
 unsigned int *addr2;
 unsigned int *addr3;
}test;
test.addr1 = 0x12345678;
test.addr2 = 0x23456781;
test.addr3 = 0x34567812;

Таким образом, данные будут выглядеть примерно так.
блок данных с обратным порядком байтов будет выглядеть так:

1234 5678 2345 6781 3456 7812  

Если я использую ту же структуру в 64-битном указателе, он, конечно, будет использовать 8 байтов на адрес и не даст правильных результатов.

Есть ли способ определить структуру в 64-битном процессоре в структуре без использования структуры, которая не использует указатели и приведение вне структуры для ее преобразования?

struct _32bit_address
{
 unsigned int addr_value1;
 unsigned int addr_value2;
 unsigned int addr_value3;
}test2;

unsigned long long Addr_ptr = (unsigned long long *)(test2.addr_value1)

person Enaud    schedule 04.06.2019    source источник
comment
У вас есть общая область памяти, к которой одновременно обращаются 32-битный процессор и 64-битный процессор? Или вы говорите о переносе исходного 32-битного кода на отдельное 64-битное железо?   -  person M.M    schedule 04.06.2019


Ответы (1)


Указатели должны быть такими же широкими, как область адресации, поэтому в вашем случае они ДОЛЖНЫ быть 64-битными.

Однако, если эти структуры генерируются на лету определенной процедурой, вы можете попытаться преобразовать их в смещения к 64-битному базовому адресу, 32-битному или лучше 16-битному смещению, если смещения меньше 65536.

Однако для этого вам нужно изменить как генератор адресов, так и те, которые используют эти структуры.

Все остальное просто невозможно.

Либо вы живете с 64-битными указателями, либо делаете множество модификаций.

person Jake 'Alquimista' LEE    schedule 04.06.2019
comment
Чтобы добавить... адрес/смещение может быть просто индексом в массиве. Работа с необработанными адресами в этом случае выглядит как провокация. - person domen; 05.06.2019