在Docker內部使用gdb偵錯程式報錯-Operation not permitted

双层吉士堡發表於2024-05-04

在docker內部使用gdb除錯時刻遇到了gdb如下報錯資訊:

warning: Error disabling address space randomization: Operation not permitted

原因

地址隨機化是linux一項安全特性,它允許核心程序啟動每次載入庫的時候都在隨機化的分佈在程序虛擬記憶體地址空間上(早期固定的庫要載入到固定地方,如果固定地方被佔用才載入到別地方。會造成多次載入程式,其庫地址都不變。如此有安全隱患)。在gdb除錯中gdb預設需要關閉linux的地址隨機化功能,可以透過gdb 命令set disable-randomization off關閉。如果在地址隨機化下除錯同一段程式,多次run時候可以看到它的執行地址和函式地址不一致。

解決方案

回到宿主機,cd /var/lib/docker/containers/,如果這一步需要許可權,且使用sudo報錯,解決方案參照sudo cd 找不到命令

sudo: cd:找不到命令
sudo: “cd”是 shell 內建命令,它無法直接執行。
sudo: -s 選項必須在特權 shell 中使用。
sudo: the -D option may be used to run a command in a specific directory.

進入正確的容器ID資料夾,
先systemctl stop docker
然後vim hostconfig.json
把“Privileged”:false改成true,儲存退出。
再systemctl start docker
重啟docker容器。搞定

相關文章