gpt4 book ai didi

c - 无法弄清楚这个 c 语法是什么

转载 作者:行者123 更新时间:2023-12-02 21:57:45 27 4
gpt4 key购买 nike

我讨厌问这样的语法问题,但我无法通过搜索找到答案。我不确定每个变量声明的含义。我对第三个的最佳猜测是,它采用标签检查点地址的逻辑与和页面大小的倒数,将其转换为无符号长整型,然后将其重新转换为空指针。代码来自这里:http://nmav.gnutls.org/2011/12/self-modifying-code-using-gcc.html

int (*my_printf) (const char *format, ...);
void (*my_exit) (int);
void *page =
(void *) ((unsigned long) (&&checkpoint) &
~(getpagesize() - 1));

谢谢!

最佳答案

my_printf 是返回 int 的函数的指针,它接受 char 指针参数和其他变量列表。

my_exit 是一个指向没有返回值的函数的指针,采用一个 int 参数。

page 是指向某种未指定类型的指针。它被分配了一个不应编译的表达式的值,因为 && 是一个二元运算符并且没有左操作数,并且一元地址到地址是没有意义的。 & ~(getpagesize() - 1) 位屏蔽了可能是地址的低位位,然后该地址将指向页面的开头。

一元 && 是一个 GNU C 扩展,它获取 (goto) 标签的地址,因此此结构基本上获取包含该标签的代码页的起始地址。这是非常特定于编译器和操作系统的东西,而不是真正的 C 语言的一部分。

关于c - 无法弄清楚这个 c 语法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17460468/

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