2016-03-08 39 views
21

我做錯了什麼(或沒做)gdb對我來說不能正常工作?警告:錯誤禁用地址空間隨機化:操作不允許

[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

當搬運工容器中運行,我直到我added'得到這個錯誤 - 安全 - 選擇seccomp = unconfined'到'docker run'。 –

+0

@CameronTaggart感謝您的提示!你讓我今天一整天都感覺很好。 – gaijin

+0

@CameronTaggart它適合我,但安全問題coms – Jia

回答

12

無論出於何種原因,您的用戶帳戶沒有權限來禁止內核的地址空間佈局隨機化的這個過程。默認情況下,gdb會關閉它,因爲它使得某種調試更容易(特別是,這意味着每次運行程序時,堆棧對象的地址都是相同的)。閱讀更多here

您可以通過禁用gdb的set disable-randomization off禁用此功能來解決此問題。

至於讓您的用戶獲得禁用ASLR所需的權限,可能歸結爲擁有對/proc/sys/kernel/randomize_va_space的寫入權限。閱讀更多here

14

如果你使用的碼頭工人,你可能需要--security-opt seccomp=unconfined選項(以及使ptrace的):

docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined