【发布时间】:2021-05-07 17:43:57
【问题描述】:
我正在阅读一篇关于 Kerberos 凭据窃取的非常有趣的文章。在 PoC 中作者有以下一行:
struct inotify_event *event = (struct inotify_event *)&buffer[i];
其中缓冲区定义为
char buffer[BUF_LEN];
我想知道的是上面的这种类型转换是如何工作的,它与
(struct notify *)buffer[i];
虽然我知道要转换的类型分别是 char * 和 char,但我无法理解作者为什么以及如何将其转换为结构并随后访问它的成员
【问题讨论】:
-
(type *)var正在转换var本身的值。(type *)&var正在将 指针投射到var。 -
C 还是 C++?选择一个或问 2 个不同的问题。 C++ 支持运算符重载,因此代码可以做任何事情。
-
为什么作者要进行演员表访问成员?您将如何访问成员?
-
struct inotify_event *event = (struct inotify_event *)&buffer[i];是未定义的行为,因为它是严格的别名违规。 -
@AndrewHenle 严格来说它不是,直到左值被取消引用为结构类型(或与有效类型不兼容的结构的任何成员)。当然,如果目的不是取消引用指针,你为什么要这样做。