gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:58:42 26 4
gpt4 key购买 nike

我讨厌问这样的语法问题,但我一直无法通过搜索找到答案。我不确定这些变量声明中的每一个的含义。我对 3rd 的最佳猜测是它采用标签检查点地址的逻辑与和页面大小的倒数,将其转换为 unsigned long,然后将其重新转换为 void 指针。代码来自这里: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/

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