注册

Linux报 “invalid argument to attach” 异常的原因以及解决办法

当在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设置为宽松的权限,可以按照以下步骤操作:

  1. 打开/etc/sysctl.conf文件:

sudo vi /etc/sysctl.conf

  1. 将以下行加入到文件中:

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

  1. 保存并关闭文件,然后运行以下命令来使更改生效:

sudo sysctl -p

设置完成后,SHPP将被设置为一个宽松的权限,其他进程将可以对正在运行的进程进行干涉。

总之,在进行调试工具操作时,要注意到Linux安全机制,避免出现类似“invalid argument to attach”的错误提示。