程序不输出任何东西
Program doesnt output anything
我目前正在使用 C 进行缓冲区溢出。我只是一个初学者,所以请放轻松。
int main( ) {
char *name[2];
name[0] = "/bin/sh";
name[1] = NULL;
execve(name[0], name, NULL);
}
这是我得到的输出: 好像我编译执行的时候,它切换到“/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);
}
对于这段代码,我被要求简要解释简化并 运行 它来解释输出。但是如屏幕截图所示,它根本不输出任何内容,我该如何解决?
it switches to "/bin/sh", is this output normal or am I doing something wrong?
是的,在这两种情况下你都执行 sh 所以提示符会改变,你可以输入命令,就像你在控制台中启动 sh .要完成 sh 执行,请输入 exit 或 control-d
it doesnt output anything at all
也就是说你没有进入sh
由于行
,第二个程序假设指针在 32b 上
*((char**)(buf + 8)) = buf;
*((char**)(buf + 12)) = NULL;
如果你在 64b 中,它将无法按预期工作,强制在 32b 中编译。
如果您在 32b 中修改其定义,例如通过 syscall
打印值 return
当然可以修改程序以在 64b 上运行:
int main(void) {
char buf[7 + 1 + 8 + 8] = "/bin/sh<garbage........>";
*(buf + 7) = 0;
*((char**)(buf + 8)) = buf;
*((char**)(buf + 16)) = NULL;
syscall(59, buf + 0, buf + 8, buf + 16);
}
如备注 11 所示,对于 x86(而 ARMv7 是我在 PI4 上的情况)和 59 对于 x86-64
我目前正在使用 C 进行缓冲区溢出。我只是一个初学者,所以请放轻松。
int main( ) {
char *name[2];
name[0] = "/bin/sh";
name[1] = NULL;
execve(name[0], name, NULL);
}
这是我得到的输出:
#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);
}
对于这段代码,我被要求简要解释简化并 运行 它来解释输出。但是如屏幕截图所示,它根本不输出任何内容,我该如何解决?
it switches to "/bin/sh", is this output normal or am I doing something wrong?
是的,在这两种情况下你都执行 sh 所以提示符会改变,你可以输入命令,就像你在控制台中启动 sh .要完成 sh 执行,请输入 exit 或 control-d
it doesnt output anything at all
也就是说你没有进入sh
由于行
,第二个程序假设指针在 32b 上*((char**)(buf + 8)) = buf;
*((char**)(buf + 12)) = NULL;
如果你在 64b 中,它将无法按预期工作,强制在 32b 中编译。
如果您在 32b 中修改其定义,例如通过 syscall
打印值 return当然可以修改程序以在 64b 上运行:
int main(void) {
char buf[7 + 1 + 8 + 8] = "/bin/sh<garbage........>";
*(buf + 7) = 0;
*((char**)(buf + 8)) = buf;
*((char**)(buf + 16)) = NULL;
syscall(59, buf + 0, buf + 8, buf + 16);
}
如备注 11 所示,对于 x86(而 ARMv7 是我在 PI4 上的情况)和 59 对于 x86-64