2016-03-08 11 views
21

co zrobiłem źle (lub nie zrobiłem), że gdb nie działa właściwie dla mnie?ostrzeżenie: Błąd wyłączający losowanie przestrzeni adresowej: Operacja niedozwolona

[email protected]:/# cat minimal.c 
int main() 
{ 
    int i = 1337; 
    return 0; 
} 
[email protected]:/# gcc -g minimal.c -o minimal 
[email protected]:/# 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. 
+28

Podczas pracy w pojemniku Döcker, mam ten błąd aż added' - zamknięcie bezpieczeństwa opt seccomp = unconfined' do 'docker run'. –

+0

@CameronTaggart dzięki za napiwek! Zrobiłeś mój dzień. – gaijin

+0

@CameronTaggart działa dobrze, ale problemy z bezpieczeństwem – Jia

Odpowiedz

12

Z dowolnego powodu konto użytkownika nie ma uprawnień do wyłączenia losowania układu przestrzeni adresowej jądra dla tego procesu. Domyślnie gdb wyłącza tę funkcję, ponieważ ułatwia sortowanie (w szczególności oznacza to, że adresy obiektów stosu będą takie same za każdym razem, gdy uruchomisz program). Czytaj więcej here.

Możesz obejść ten problem, wyłączając tę ​​funkcję gdb z set disable-randomization off.

Jeśli chodzi o uzyskanie uprawnień użytkownika potrzebnych do wyłączenia usługi ASLR, prawdopodobnie sprowadza się ona do uprawnień do zapisu do usługi /proc/sys/kernel/randomize_va_space. Czytaj więcej here.

14

Jeśli używasz Döcker, prawdopodobnie trzeba wybrać opcję --security-opt seccomp=unconfined (jak również umożliwia ptrace):

docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined 
Powiązane problemy