Es imposible analizar un programa para averiguar si hará algo malicioso. Esto es cierto independientemente de si está intentando analizar el código fuente o el código compilado.
La forma de hacer lo que está pidiendo se hace compilando y ejecutando el código en un arenero. Una vez que el programa ha finalizado (o después de un tiempo de espera que ha decidido), destruye el arenero.
La seguridad de tal construcción es tan segura como la caja de arena que está utilizando. Dependiendo de los requisitos del código que necesita para ejecutar el sandbox, puede ser algo simple como el modo de computación segura de Linux, o algo complicado como una máquina virtual completa, idealmente sin conectividad de red.
Cuanto más complicado sea el recinto de seguridad, mayor será el riesgo de una vulnerabilidad de seguridad en el recinto de seguridad que socava un diseño que de otra manera sería bueno.
Algunos idiomas se pueden compilar de forma segura fuera de un arenero. Pero hay idiomas donde incluso compilarlos puede consumir una cantidad impredecible de recursos. Esta pregunta en un sitio asociado muestra algunos ejemplos de cómo un código fuente pequeño puede explotar en una salida grande.
Si el compilador en sí está libre de vulnerabilidades, puede ser suficiente para establecer límites en la cantidad de CPU, memoria y espacio en disco que puede consumir. Para mayor seguridad, puede ejecutar el compilador dentro de una máquina virtual.
Obviamente, estos métodos se pueden combinar para una capa adicional de seguridad. Si tuviera que construir un sistema así, probablemente iniciaría una máquina virtual y dentro de la máquina virtual usaría ulimit para limitar el uso de recursos del compilador. Luego vincularía el código compilado en un contenedor para ejecutarlo en modo de computación segura. Finalmente, aún dentro de la máquina virtual, ejecutaría el ejecutable vinculado.