Если я вас правильно понимаю, вы пытаетесь заполнить буфер машинным кодом, сгенерированным во время выполнения, и получить указатель функции на этот код, чтобы вы могли его вызвать.
Это возможно, но сложно. Вы можете использовать reinterpret_cast<>
, чтобы превратить указатель данных в указатель на функцию, но вам нужно убедиться, что память, выделенная для вашего буфера, помечена как исполняемая операционной системой. Это будет включать системный вызов (LocalAlloc()
в Windows iirc, не помню в Unix), а не «простой ванильный» вызов malloc / new.
Предполагая, что у вас есть исполняемый блок памяти, вы должны убедиться, что ваш машинный код учитывает соглашение о вызовах, указанное указателем функции, который вы создаете. Это означает нажатие / извлечение соответствующих регистров в начале функции и т. Д.
Но как только вы это сделаете, вы сможете использовать указатель на функцию, как и любую другую функцию.
Возможно, стоит посмотреть на JVM с открытым исходным кодом (или Mono), чтобы увидеть, как они это делают. В этом суть компиляции JIT.