gpt4 book ai didi

c++ - 这段代码会发生什么? (执行一个字符缓冲区)

转载 作者:IT老高 更新时间:2023-10-28 22:15:05 24 4
gpt4 key购买 nike

谁能给我一个完整的解释这第二行代码发生了什么?

我知道包含 shellcode 的缓冲区的地址被转换为执行的函数指针。但是我对所涉及的所有大括号和步骤有点困惑,所以我需要更详细的解释。

unsigned char buf[] = "\x90\x90\x90\x90\x90\x90\x90\x90";

((void(*)())buf)();

我试着用这种方式向自己解释:

buf                     //address of the buffer containing code
void(*)() //"type" function pointer returning void, no parameters
(void(*)()) buf //cast buf to said type
( (void(*)()) buf )() //take the outcome of the cast and execute it by appending ()

这是正确的吗?

编辑:我知道 DEP 会阻止执行,即使它会执行,程序也会崩溃,因为它会在 NOP 之后执行“随机垃圾”。我的问题只是关于函数调用的语法。

最佳答案

  1. buf(数组名转换为指针)转换为 void(*)() 函数指针

    (void(*)())buf
  2. 通过指针调用该函数

    (function_pointer)();

请注意,这是错误的,因为 operator precedence规则

(void(*)()) buf() // Function call has a higher precedence over type cast

所以需要另外一对括号。

最终执行它(如果 DEP 允许,这取决于系统)和(如果 x86)Nop-Nop-Nop 等。

你说得对。

附带说明:NOP 代码也会使您的应用崩溃:没有返回语句和 IP该有效负载完成后将不会恢复。

关于c++ - 这段代码会发生什么? (执行一个字符缓冲区),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24672792/

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