Почему адрес, возвращаемый оператором@, не совпадает с адресом, возвращаемым функцией GetProcAddress
мне нужно получить адрес метода APi Win (FindWindowW
) , Я использую @
оператора и GetProcAddress
но оба возвращает результаты differents.
var
p1, p2 : Pointer;
begin
p1:= @Winapi.Windows.FindWindowW;
p2:=GetProcAddress(GetModuleHandle('user32.dll'), 'FindWindowW');
ShowMessage(Format('p1 %p p2 %p ', [p1, p2]));
end;
Почему возвращаемые значения разные?
1 ответов
потому что статическое связывание использует таблицу перехода thunk для вызова функции DLL.
p2
в вашем примере правильный адрес FindWindowW
функция в вашем процессе, пока p1
Это адрес инструкции прыжка, как это
jmp dword ptr [SomeAddress]
здесь SomeAddress
указывает на фактический адрес