c - (type *)var 和 (type *)&var 的区别
问题描述
我正在阅读一篇关于 Kerberos 凭据窃取的非常有趣的文章。在 PoC 中,作者有以下一行:
struct inotify_event *event = (struct inotify_event *)&buffer[i];
其中缓冲区定义为
char buffer[BUF_LEN];
我想知道的是上面的这种类型转换是如何工作的,它与
(struct notify *)buffer[i];
虽然我知道被转换的类型分别是char *
和char
,但我无法理解作者为什么以及如何将其转换为结构并随后访问它的成员
解决方案
(type *)var 和 (type *)&var 的区别
前者将 的值var
转换为指向 的指针type
。var
当包含表示对象地址的值时,这可能是合理的type
。鉴于var
在您的情况下是 a char
,将其值重新解释为指针可能是不合理的。
后者将指向 的指针转换为指向var
的指针type
。这可能是合理的,当var
它及其兄弟代表一个您希望解释为的值时type
。
推荐阅读
- multithreading - 如何使用-2依赖项制作docross循环
- c# - ASP.NET MVC 控制器将数据发送到视图,但视图中的“ThenInclude”数据为空
- c++ - 在应用程序结束时创建 cv::Ptr 会导致异常
- swift - SwiftUI CoreData 如何删除行并保存上下文
- php - Laravel 加入 3 个表来过滤视图表
- annotations - VGG 图像注释器未以 COCO 格式导出
- python - kivy:如何连接Imagebutton?
- html - QML 文本与
线 - api-platform.com - 过滤收藏品
- oracle - 如何将oracle apex应用程序导出文件从较低版本(4.2)导入到较高版本(18.1)