Как перевести делегата на абсолютный адрес в DRAM?

Я хотел бы перевести членов делегата .ptr а также .funcptr по абсолютному адресу, который соответствует чему-то в исполняемом образе в DRAM.

Цель состоит не в том, чтобы вызывать или изменять, а в том, чтобы позволить цели разбирать себя во время выполнения, когда ее собственное изображение загружается в DRAM.

Пока это уже работает с глобальными функциями.

Является ли это возможным?

1 ответ

Решение

Адрес делегата является значением .funcptr имущество. Тип этого свойства немного вводит в заблуждение - он имеет тип function и не перечисляет скрытый аргумент, который на самом деле ожидается для передачи контекста, но просто для получения адреса вы можете игнорировать тип (явно приведя к void* или же size_t если вы хотите изменить тип) и просто посмотрите на адрес.

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

Другие вопросы по тегам