程序什么都不输出

问题描述 投票:-2回答:1

我目前是C的缓冲区溢出对象。我只是一个初学者,所以请对我好一点。

int main( ) {
 char *name[2];
 name[0] = "/bin/sh";
 name[1] = NULL;
 execve(name[0], name, NULL);
} 

这是我得到的输出:enter image description here似乎当我编译并执行它时,它切换为“ / bin / sh”,这是正常输出还是我做错了?

#include <unistd.h> 

 int main(void) {
 char buf[7 + 1 + 4 + 4] = "/bin/sh<garbage>";

 *(buf + 7) = 0;
 *((char**)(buf + 8)) = buf;
 *((char**)(buf + 12)) = NULL;
 syscall(11, buf + 0, buf + 8, buf + 12);
}

对于此代码,要求我简要解释一下简化并运行它来解释输出。但是,如屏幕截图所示,它根本不输出任何内容,我该如何解决?enter image description here

c buffer buffer-overflow
1个回答
0
投票

它切换到“ / bin / sh”,此输出正常还是我做错了?

在两种情况下都可以执行sh,因此提示会更改,并且您可以输入命令,例如在控制台中启动sh。要完成sh执行,请输入exit或Control-d

它什么都不输出

这表示您不输入sh

第二个程序假定指针由于行而在32b上

*((char**)(buf + 8)) = buf;
 *((char**)(buf + 12)) = NULL;

如果您使用的是64b,则无法正常工作,请强制在32b中进行编译。

如果您在32b中,请修改其定义,例如打印syscall返回的值

© www.soinside.com 2019 - 2024. All rights reserved.