加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 为什么@运算符返回的地址与GetProcAddress函数返回的

发布时间:2020-12-15 03:55:31 所属栏目:大数据 来源:网络整理
导读:我需要获取Win APi方法的地址( FindWindowW ),我正在使用@运算符和 GetProcAddress ,但两者都返回不同的结果. var p1,p2 : Pointer;begin p1:= @Winapi.Windows.FindWindowW; p2:=GetProcAddress(GetModuleHandle('user32.dll'),'FindWindowW'); ShowMessage
我需要获取Win APi方法的地址( FindWindowW),我正在使用@运算符和 GetProcAddress,但两者都返回不同的结果.
var
  p1,p2 : Pointer;
begin
  p1:= @Winapi.Windows.FindWindowW;
  p2:=GetProcAddress(GetModuleHandle('user32.dll'),'FindWindowW');
  ShowMessage(Format('p1 %p p2 %p ',[p1,p2]));
end;

为什么返回的值不同?

解决方法

因为静态链接使用thunk跳转表来调用DLL函数.

你的例子中的p2是进程中FindWindowW函数的正确地址,而p1是这样的跳转指令的地址

jmp dword ptr [SomeAddress]

其中SomeAddress指向FindWindowW函数的实际地址.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读