Delphi中的COM方法偏移
发布时间:2020-12-15 10:12:38 所属栏目:大数据 来源:网络整理
导读:在Delphi中,如何找到COM方法的地址? 我可以硬编码偏移量 //0 is the offset of the QueryInterface methodp := TPonterArray(pointer(SomeInterface)^)[0]; 但我更喜欢使用符号名称.以下显然不起作用: var M : TMethod;...M := TMethod(SomeInterface.Quer
在Delphi中,如何找到COM方法的地址?
我可以硬编码偏移量 //0 is the offset of the QueryInterface method p := TPonterArray(pointer(SomeInterface)^)[0]; 但我更喜欢使用符号名称.以下显然不起作用: var M : TMethod; ... M := TMethod(SomeInterface.QueryInterface); 谢谢! 解决方法
您可以使用vmtoffset汇编程序指令获取接口方法相对于接口方法表开头的字节偏移量.看一下System.pas中_IntfCast的实现,例如:
call dword ptr [eax] + vmtoffset IInterface.QueryInterface ... call dword ptr [eax] + vmtoffset IInterface._Release 第一个表达式加0;第二,8. 但是,您无法对这些表达式进行参数化.它们是编译时常量,因此您无法在运行时选择所需的方法.您需要提前表示所有可能的方法名称. 你真正需要挂钩的是QueryInterface.完成后,您可以返回所需的任何代理对象,可以拦截对所有其他方法的调用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |