В современных операционных системах это зависит от того, помечена ли память как исполняемая или нет. В системах POSIX может иметь возможность получить исполняемую память, используя mmap
. Имейте в виду, что даже на данной архитектуре процессора соглашение о вызовах может отличаться. Например, если вызывающая сторона ожидает, что вызываемый объект удалит аргументы из стека, ваш код должен сделать это лучше, иначе при возврате произойдет сбой. (Обычно C ABI не предъявляют этого глупого требования, но есть над чем подумать.)
Вместо того, чтобы пытаться вызывать ваш машинный код непосредственно как указатель на функцию C, может быть лучше написать встроенную оболочку asm, которая его вызывает. Таким образом, вы можете контролировать соглашение о вызовах.