Как разыменовать определенный адрес в памяти через разыменование другого адреса в памяти?

Я использую в своем проекте загрузчик в качестве файлов hex и s19, поэтому мне не разрешено изменять его содержимое. В этом загрузчике есть часть, реализованная следующим образом, чтобы проверить, является ли мое приложение допустимым:

#define CHECK_PATTERN_ADDRESS ((int32)0x00020000)
#define VALID_PATTERN             ((int16)0xE900)
#define VALID_PATTERN_MASK        ((int16)0xFF00)

int16    pattern_data = *(int16 *)CHECK_PATTERN_ADDRESS;
if ((pattern_data & VALID_PATTERN_MASK) == VALID_PATTERN)
{
//Valid application
}
else
{
//Not Valid application
}

Исходя из приведенного выше кода, для того, чтобы загрузчик считал мое приложение допустимым, необходимо поместить действующий шаблон в указанный адрес «0x00020000».

Этот шаблон загружается непосредственно по этому адресу при загрузке приложения.

Это делается с помощью файла сборки, содержащего этот шаблон, и путем указания адреса, по которому он будет загружен в память через файл компоновщика.

Итак, в настоящее время действительный шаблон успешно загружен по указанному адресу «0x00020000» во время процесса загрузки моего приложения.

Основное ограничение:

Загрузчик должен найти правильный шаблон по этому конкретному адресу «0x00020000»

Проблема в:

Мне нужно добавить мой действительный шаблон в другой адрес «скажем, 0x00040000», в то время как DLL будет продолжать разыменовывать данные с запрошенного адреса «0x00020000» ..

Тем не менее, я могу добавить любые данные через файл сборки на исходный адрес «0x00020000» или напрямую добавить любые конкретные шестнадцатеричные данные по этому адресу.

Вопрос в том:

Что я могу загрузить по этому адресу «0x00020000», чтобы при загрузке его в своем коде «как указано выше» он принимал значения, загруженные в другой адрес «0x00040000»

0

Решение

На 0x00020000 вы можете указать отправную точку кода, который знает о ваших «расширениях» 0x00040000. Затем, без каких-либо дополнительных посредников, ваш загрузчик будет загружать этот код как обычно, и этот код (давайте назовем его «вторичным загрузчиком») загрузит код, который вы поместили под 0x00040000.

1

Другие решения

Других решений пока нет …