是否有可能在Linux中阻止覆盖argv [0]variables,例如strcpy(argv [0],“test”,strlen(argv [0]))? 我想阻止或至lesslogging这些变化。
PS我渴望改变内核,只是帮助我find内核源码中的哪些调用或函数,我可以“捕捉”这个改变。 我注意到,当argv [0]改变时,/ proc / _pid_cmdline的内容也改变了,我试图把一个简单的日志logging到fs / proc / base.c中的proc_pid_cmdline(),但它不工作,只是如何我想了。 谢谢。
一般来说,解决方法是将包含参数的内存页面设置为只读,这会在尝试更改内容时导致内存访问冲突。 通过修改C运行库或Linux内核,就可以捕捉到并确定之后要做什么。
修复内核不会通过/proc/$pid/cmdline
暴露argv
会更容易/更好; 可以说,这实际上是一个危险的安全泄漏,揭露属于这个过程的私人记忆。 例如,这是一个愚蠢的例子,但是一致性程序可以在使用参数完成之后,将其密码,加密密钥等存储在之前由其参数字符串占用的空间中。
如果你真的想允许但记录对cmdline
更改,将会变得更加困难。 您将不得不安排将数据放在最初只读页面中,并对其进行陷阱写入,从而允许写入,但在发生写入操作时记录更改。 我认为这将是非常脆弱和难以维持的。