【发布时间】:2011-12-18 21:12:39
【问题描述】:
我需要使用他的实例和变量的偏移量来访问一个类的 strict private class var 值。
到目前为止已经试过了,检查这个示例类
type
TFoo=class
strict private class var Foo: Integer;
public
constructor Create;
end;
constructor TFoo.Create;
begin
inherited;
Foo:=666;
end;
//this function works only if I declare the foo var as
//strict private var Foo: Integer;
function GetFooValue(const AClass: TFoo): Integer;
begin
Result := PInteger(PByte(AClass) + 4)^
end;
如您所见,函数 GetFooValue 仅在 foo 变量未像类 var 那样声明时才起作用。
问题是我必须如何修改GetFooValue 才能在声明为strict private class var Foo: Integer; 时获得Foo 的值
【问题讨论】:
-
只是一些随机猜测:你试过没有
+ 4吗?如果你在调用 GetFooValue 之前创建了一个TFoo类型的对象(也就是说,如果你“使用类”)会发生什么? -
大概你没有可用的源代码?对吗?
-
@DavidHeffernan,是的,没错,我只有班级的声明。和 dcu 文件。
-
我可以使用指针(指向实例)和字段或属性的偏移量访问目标类的所有严格私有成员,但声明的
class var除外。 -
如果您没有来源,那么您就不走运了。类 var 不是字段,它们是全局变量,因此您无法通过字段结构黑客攻击它们。这也是你永远不应该使用没有来源的库的另一个原因。
标签: delphi pointers delphi-xe class-helpers