【问题标题】:Line of code clarification代码行说明
【发布时间】:2017-01-23 15:50:34
【问题描述】:

我正在读一本关于缓冲区溢出和 shellcode 的书,书中有下面这段代码。

除了buffer = command +strlen(command);的目的,大部分我都明白了。

当我在缓冲区上使用memset() 时,它不会覆盖我之前用command+strlen(command) 存储在那里的内容吗? 有人可以帮我澄清一下吗?

【问题讨论】:

  • 增加指针。
  • command 指向一个以空字符结尾的字符串,而buffer 被设置为指向该以空字符结尾的字符串的结尾。
  • 不要发布代码图片,而是发布代码.. -1
  • 没有。 buffer = command+strlen(command) 将指针设置为该特定地址。 memset 将值写入buffer 指向的内存。

标签: c arrays pointers memory stack


【解决方案1】:

+ 的操作数之一是指针时,C 会进行指针运算。

结果或pointer + number 是一个指针值,它指向索引为number 的值。相当于&pointer[number]

所以,在这种情况下:

buffer = command + strlen(command);

等价于

buffer = &command[strlen(command)];

所以buffer 将指向command 中的字符串终止符,如果您想将某些内容连接到command 字符串,这正是正确的位置。

【讨论】:

  • 哦,所以当我使用 memset 时,它会在字符串终止符之后将其存储在内存中。谢谢。我只是不知道为什么我问这个问题会受到这么多的反对
  • @pedrosantos 不是马上。 On 字符串终止符。 (关于否决票:不要将代码发布为图像。将代码发布为文本,否则您会得到一些反对票。)
  • 谢谢你的帮助,我从现在开始贴代码