qu'ai-je fait de mal (ou de ne pas avoir fait) pour que gdb
ne fonctionne pas correctement pour moi?
root@6be3d60ab7c6:/# cat minimal.c
int main()
{
int i = 1337;
return 0;
}
root@6be3d60ab7c6:/# gcc -g minimal.c -o minimal
root@6be3d60ab7c6:/# gdb minimal
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
.
.
.
Reading symbols from minimal...done.
(gdb) break main
Breakpoint 1 at 0x4004f1: file minimal.c, line 3.
(gdb) run
Starting program: /minimal
warning: Error disabling address space randomization: Operation not permitted
During startup program exited normally.
(gdb)
(gdb) print i
No symbol "i" in current context.
Si vous utilisez Docker, vous avez probablement besoin du --security-opt seccomp=unconfined
option (et activation de ptrace):
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined
Pour une raison quelconque, votre compte d'utilisateur n'est pas autorisé à désactiver la randomisation de la disposition de l'espace d'adressage du noyau pour ce processus. Par défaut, gdb le désactive car cela facilite certaines sortes de débogage (en particulier, cela signifie que l'adresse des objets de la pile sera la même à chaque exécution du programme). Lire la suite ici .
Vous pouvez contourner ce problème en désactivant cette fonctionnalité de gdb avec set disable-randomization off
.
Quant à l’obtention de l’autorisation nécessaire à votre utilisateur pour désactiver ASLR, il s’agit probablement d’avoir le droit d’écrire sur /proc/sys/kernel/randomize_va_space
. Lire la suite ici .
En s'appuyant sur réponse de wisbucky (merci!), Voici les mêmes paramètres pour la composition de Docker:
security_opt:
- seccomp:unconfined
cap_add:
- SYS_PTRACE
L'option de sécurité seccomp:unconfirmed
corrigé le address space randomization
avertissements.
La capacité SYS_PTRACE ne semble pas avoir d'effet notable, même si documentation de Docker indique que SYS_PTRACE est une fonctionnalité "non autorisée par défaut". Peut-être que je ne sais pas quoi chercher.