Как перевести делегата на абсолютный адрес в DRAM?
Я хотел бы перевести членов делегата .ptr
а также .funcptr
по абсолютному адресу, который соответствует чему-то в исполняемом образе в DRAM.
Цель состоит не в том, чтобы вызывать или изменять, а в том, чтобы позволить цели разбирать себя во время выполнения, когда ее собственное изображение загружается в DRAM.
Пока это уже работает с глобальными функциями.
Является ли это возможным?
1 ответ
Адрес делегата является значением .funcptr
имущество. Тип этого свойства немного вводит в заблуждение - он имеет тип function
и не перечисляет скрытый аргумент, который на самом деле ожидается для передачи контекста, но просто для получения адреса вы можете игнорировать тип (явно приведя к void*
или же size_t
если вы хотите изменить тип) и просто посмотрите на адрес.
Это не адрес в физической памяти, вы должны спросить об этом операционную систему, но поскольку виртуальный адрес, который он дает, автоматически преобразуется процессором, то, скорее всего, вы в любом случае захотите.