gpt4 book ai didi

command - "/usr/bin/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";?

转载 作者:太空狗 更新时间:2023-10-29 16:27:52 25 4
gpt4 key购买 nike

我在 if.c 中找到了这一行unix 版本 6。

ncom = "/usr/bin/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";

为什么有这么多x?你为什么要设置这个?

最佳答案

您所说的代码如下所示:

ncom = "/usr/bin/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
while(c=nargv[0][i]) {
ncom[9+i++] = c;
}
ncom[9+i] = '\0';

所有这些 x 都充当缓冲区,它们被以下循环覆盖。因此,代码有效地将“/usr/bin/”添加到 nargv[0] 中的命令。

有了更多的上下文,代码是这样做的:

execv(nargv[0], nargv, np);
execv(ncom+4, nargv, np);
execv(ncom, nargv, np);

如果 nargv[0] 中的给定命令是 "foo" 它将首先尝试运行 "foo" 然后 “/bin/foo” 最后是 “/usr/bin/foo”


请注意,上面是如何做这样的事情的一个很好的例子:

如果nargv[0]中的字符串恰好比x的个数长,代码会愉快地继续复制数据。这将覆盖堆栈的其他部分。结果是缓冲区溢出的一个很好的例子。 (您分配了一定大小的缓冲区并写入了比分配的更多的数据。)

这个例子将演示问题:

#include <stdio.h>
int main(){
char s[]="abcde";
int i;
for(i=0;i<100;i++){
printf("position %2d contains value %3d\n",i,s[i]);
s[i]=0;
}
puts(s);
return 0;
}

如果你运行它,它(很可能)会输出这个:

position  0 contains value  97
position 1 contains value 98
position 2 contains value 99
position 3 contains value 100
position 4 contains value 101
position 5 contains value 0
position 6 contains value 0
position 7 contains value 0
position 8 contains value 0
position 9 contains value 0
position 10 contains value 0
position 11 contains value 0
position 12 contains value 12
position 1 contains value 0
position 2 contains value 0
position 3 contains value 0
position 4 contains value 0
position 5 contains value 0
position 6 contains value 0
position 7 contains value 0
[...]

它将用零填充字符串(包含 ASCII 值 97 到 101)并继续写入内存,它会在其中找到变量 i 的位置,并将其设置为零。现在 i 为零,因此循环再次开始,一次又一次地覆盖已经被覆盖的字符串。

不仅局部变量可以被覆盖,函数的返回地址也可能被覆盖,导致“段错误”或任意代码的执行,这经常被恶意软件使用。

关于command - "/usr/bin/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27705708/

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