我是一个特尔斐人,在这里喝醉了,试图弄清楚这个C++代码在这里但是不知道.. thanx
char sc[] = "\x31.....";
int main(int argc, char **argv)
{
int (*f)();
f = (int (*)())sc;
(int)(*f)();
}
Run Code Online (Sandbox Code Playgroud)
"sc"是一个字母
tem*_*def 10
让我们一次走一条线:
int (*f)();
Run Code Online (Sandbox Code Playgroud)
这声明了一个名为变量的变量f,该变量是一个不带参数并返回一个函数的函数的指针int.
f = (int (*)())sc;
Run Code Online (Sandbox Code Playgroud)
这里带括号的部分是类型int (*)(),指向函数的指针的类型,不带参数并返回int.这是一个类型转换,表示sc该类型的函数,然后分配给它f.由于sc似乎是一个char数组,这意味着"将数组中的字节sc视为不带参数的函数的代码并返回一个int." 这将导致C++规范中的未定义行为,并且取决于您的系统,该函数可能会起作用,或者由于在包含代码的页面上设置了无执行位,它可能会崩溃.
(int)(*f)();
Run Code Online (Sandbox Code Playgroud)
这是不必要的复杂.这(int)是表达式的类型(*f)().这里(*f)是指向的函数f,并()调用它.因此,这意味着"调用指向的函数f,然后将结果转换为" int.当然,f已经回归了int,所以演员阵容毫无意义.如上所述,这会导致未定义的行为.
希望这可以帮助!