当在Linux系统上执行类似ptrace,strace等调试工具时,可能会出现错误提示“invalid argument to attach”,这通常是由于系统安全机制限制导致的。
操作系统提供了一个安全机制称为“安全洞渐进式防护”(Security Hole Progress Protection, 以下简称SHPP),该机制限制了其他进程对正在运行进程的干涉。
要解决这个问题,可以禁用SHPP或将其设置为一个更宽松的设置。
以下示例将演示如何禁用SHPP和如何将SHPP设置为宽松的权限。
禁用SHPP
要禁用SHPP,在启动Linux系统时,在GRUB或其他引导器中添加以下内核参数:
kernel /vmlinuz-5.4.0-70-generic root=/dev/mapper/ubuntu--vg-root ro amdgpu.cik_support=1 amdgpu.si_support=1 intel_iommu=on iommu=pt svm=off vsyscall=emulate shpp=0
将SHPP参数设置为0即可完全禁用SHPP。
设置SHPP为宽松的权限
要将SHPP设置为宽松的权限,可以按照以下步骤操作:
- 打开/etc/sysctl.conf文件:
sudo vi /etc/sysctl.conf
- 将以下行加入到文件中:
kernel.yama.ptrace_scope = 0
kernel.yama.protected_sticky_symlinks = 0
kernel.yama.send_sigkill = 0
kernel.yama.sigkill_reason = 0
kernel.yama.sigkill_default = 0
- 保存并关闭文件,然后运行以下命令来使更改生效:
sudo sysctl -p
设置完成后,SHPP将被设置为一个宽松的权限,其他进程将可以对正在运行的进程进行干涉。
总之,在进行调试工具操作时,要注意到Linux安全机制,避免出现类似“invalid argument to attach”的错误提示。