gpt4 book ai didi

c - 指针声明和函数调用中的奇怪 C 语法

转载 作者:行者123 更新时间:2023-12-04 12:29:30 28 4
gpt4 key购买 nike

在有人建议使用 cdecl 工具之前,我已经尝试过了。奇怪的是,大多数查询的语句都返回语法错误警告。

下面是我在网上找到的一个 C 程序,它只运行一段 shellcode。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char **argv) {

char shellcode[] = "\xb0\x01\x31\xdb\xcd\x80";

int (*func)();

func = (int (*)()) shellcode;
(int)(*func)();

return 0;

}

该程序按预期工作,但 C 语法是我见过的最奇怪的语法之一。我会尽力解释它们。

int (*func)();

此语句将 func 声明为指向返回 int 的函数(由“()”指示)的指针(由“*”指示)。

func = (int (*)()) shellcode;

此语句将 shellcode 数组类型转换为指向函数(由“()”表示)的指针(由“(*)”表示),该函数返回一个 int 并将指针分配给 func。

(int)(*func)();

最后一条语句执行指针 func(由“(*func)”指示)指向的函数(由“()”指示)并将结果类型转换为整数。

认为这就是这里发生的事情。如果任何对 C 更有经验的人发现我的解释有任何错误,或者可以提供替代或更具教育意义的解释,我非常欢迎您的意见。

我从来没有写过像这样的变量初始化或函数调用,所以我对显示的语法仍然有些困惑。如果您有更易读的方式来编写上面的代码,也请提供输入。

谢谢。

最佳答案

这一切都是正确的,虽然我不明白为什么它将返回值转换为一个 int;我怀疑即使是写这篇文章的人也对 C 函数指针语法没有那么自信。

在现实世界中,您可能会看到使用 typedef 编写的代码:

typedef (*funcT)();
funcT func = (funcT) shellcode;
(*func)();

关于c - 指针声明和函数调用中的奇怪 C 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28667607/

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