gpt4 book ai didi

linux - Linux 程序的堆栈是否以某种非显式方式进行了修改?

转载 作者:太空狗 更新时间:2023-10-29 12:00:53 25 4
gpt4 key购买 nike

我正在尝试在 Linux 上的 NASM 中编写一个简单的 ELF64 病毒。它将自己附加到受害者(当然会做所有与部分和段相关的事情)并更改受害者的入口点,使其指向恶意代码。

被感染程序启动时,第一个执行的是我的病毒,一切正常时,跳转到原入口点执行受害者代码。

当病毒感染简单的 C++ hello world 时,一切正常:正如我在 strace 中看到的那样,病毒正确执行,然后执行受害者的代码。

但是如果我追加:

printf("%s\n", argv[0]);

对受害者代码重新感染并运行,病毒代码正常执行,打印“hello world”,但随后抛出段错误。

我认为这意味着堆栈在病毒执行期间被更改,因此有一些随机数而不是原始 argv[0]。

不过我分析了我的整个病毒源,标记了所有的push、pop和直接修改rsp,仔分割析了一下,堆栈应该是一样的状态。但是,据我所知,事实并非如此。

是否有可能堆栈正在以某种非显式方式被修改,例如系统调用?或者这可能是不可能的,我应该再花几个小时盯着源代码寻找错误?

最佳答案

ELF64 virus in NASM on Linux

大概在 x86_64 上(64 位 Linux 也可以是 aarch64,或 powerpc64,或 sparcv9,或……)。

it seems that the stack should be in the same state

寄存器呢?请注意,在 x86_64 上,argv 被传递给 $rsi 中的 main,而不是在堆栈上。

必须阅读并理解x86_64 calling conventions .

关于linux - Linux 程序的堆栈是否以某种非显式方式进行了修改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37091592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com