![]() |
1
1
“如果存在结构的成员
表达式的哪些部分,特别是给你带来了问题?
内部部分
|
![]() |
2
2
Imo 0x1000 is just a randomly chosen number. It is not a valid pointer, and it you could probably use zero instead of it. 它是如何工作的:
因为F没有被写入,所以没有访问冲突/segfault。 您可能使用零而不是0x1000并放弃减法(即只使用“((tint)&((c*)0x0000)->f))”,但作者可能认为从指针到成员减法基指针比直接将指针强制转换为整数更为“合适”。或者编译器可能提供“隐藏”类成员,这些类成员可以有负偏移(在一些编译器中是可能的),例如Delphi编译器(我知道它不是C++)提供了多个隐藏的“字段”,它们位于“Soad”(类似于“这个”)指针之前,在这种情况下,使用0x1000而不是0是有意义的。 |
![]() |
3
1
它计算出地址为0x1000的类/结构的成员“f”的相对地址,然后减去0x1000,以便只返回类/结构地址和成员函数地址之间的差。我设想使用非零值(即0x1000)来避免空指针检测。 |