También puede hacerlo mediante programación desde la fuente C antes de UNIX exec
.
Si se echa un vistazo a las fuentes de setarch (aquí hay una fuente):
http://code.metager.de/source/xref/linux/utils/util-linux/sys-utils/setarch.c
Puede ver si se reduce a una llamada al sistema (syscall
) o una llamada de función (dependiendo de lo su sistema lo define). De setarch.c:
#ifndef HAVE_PERSONALITY
# include <syscall.h>
# define personality(pers) ((long)syscall(SYS_personality, pers))
#endif
En mi 6 sistema de 64 bits de CentOS, parece que utiliza una función (que probablemente llama a la llamada al sistema de auto-mismo más arriba). Echar un vistazo a este fragmento del archivo de inclusión en /usr/include/sys/personality.h
(como se hace referencia como <sys/personality.h>
en el código fuente setarch):
/* Set different ABIs (personalities). */
extern int personality (unsigned long int __persona) __THROW;
Lo que se reduce a, es que se puede, a partir del código C, llamada y establecer el personalidad para usar ADDR_NO_RANDOMIZE y luego exec
(al igual que setarch
).
#include <sys/personality.com>
#ifndef HAVE_PERSONALITY
# include <syscall.h>
# define personality(pers) ((long)syscall(SYS_personality, pers))
#endif
...
void mycode()
{
// If requested, turn off the address rand feature right before execing
if (MyGlobalVar_Turn_Address_Randomization_Off) {
personality(ADDR_NO_RANDOMIZE);
}
execvp(argv[0], argv); // ... from set-arch.
}
Es bastante obvio que no se puede convertir la aleatorización dirección de apagado en el proceso que se encuentra (sonrisa: a menos de carga dinámica tal vez), así que esto sólo afecta a los tenedores y los ejecutivos más tarde. Creo que las banderas de aleatorización de direcciones son heredadas por subprocesos secundarios.
De todos modos, así es como puedes desactivar programáticamente la aleatorización de direcciones en el código fuente C. Esta puede ser su única solución si no desea que forzar a un usuario a intervenir de forma manual y se inicie con el setarch o alguna de las otras soluciones enumeradas anteriormente.
Antes de quejarse de problemas de seguridad al desactivar esto, algunas bibliotecas/herramientas de memoria compartida (como PickingTools shared memory y algunas IBM databases) deben poder desactivar la aleatorización de direcciones de memoria.
¿Qué sistema operativo? ...... – Orbit
relacionado http://stackoverflow.com/questions/11238457/disable-and-re-enable-address-space-layout-randomization-only-for-myself –