Estoy trabajando en un sistema en tiempo de ejecución para programas paralelos que pueden aprovechar un diseño de espacio de direcciones común en múltiples procesos, potencialmente distribuidos en varios (miles) nodos. Muchas veces, el software creado para este entorno se ejecuta en sistemas Linux que tienen habilitada la aleatorización del espacio de direcciones de forma predeterminada, y es posible que los usuarios no quieran o no puedan deshabilitarlo en todo el sistema (a través de sysctl -w kernel.randomize_va_space=0
y similares). Esto impone algunas limitaciones en los programas paralelos y puede dañar el rendimiento. Por lo tanto, queremos descubrir cómo deshabilitarlo para los binarios que construimos. La seguridad no es un problema, ya que este software siempre se ejecuta en entornos controlados.Cómo deshabilitar la aleatorización de espacio de direcciones para un binario en Linux?
que he encontrado referencias a varios indicadores y variables, como ET_EXEC
, EF_AS_NO_RANDOM
(aparentemente nunca se fusionó?) Y PF_RANDOMIZE
, pero no puedo encontrar ningún documento que describe lo que puedo hacer para establecer estas banderas. Una respuesta ideal me diría qué indicador de compilador/ensamblador/enlazador deshabilitará la asignación aleatoria para el binario resultante, y en qué versiones de la cadena de herramientas/núcleo funciona. Lo mejor sería una herramienta que hace lo mismo después de construir un binario.
Como estoy seguro de que alguien lo sugerirá, ya soy consciente de que podemos hacer este cambio en tiempo de ejecución con setarch -R
, pero es preferible grabar esto en el ejecutable.
Parece que paxctl -rx
debería ser el truco, pero no parece aplicarse al método actual utilizado en kernels que no incluyen los parches PaX.
Investigaré e intentaré esto ahora. – Novelocrat
Parece que funcionó. ¡Gracias! – Novelocrat