我的目标是通过其地址调用某些功能。我该怎么办?
我已经为这样的目标完成了下一步的工作,但是最初(1) - 我有访问冲突(不知道为什么)和第二次我有一些问题,调用函数是具有ESP值的ASM。 ..
第一个(访问冲突的问题):
#include <iostream>
#include <Windows.h>
const DWORD_PTR offset = 0x00001a90;
typedef void (__stdcall *uef)(int);
int main(void)
{
HMODULE hModule = LoadLibrary(L"C:\\Windows\\system32\\OpenAL32.dll");
DWORD_PTR addr = (DWORD_PTR)hModule + offset;
uef func = (uef)offset;
func(0);
return 0;
}
第二个(运行时出现ESP值的问题):
#include <iostream>
#include <Windows.h>
typedef void (__stdcall *uef)(int);
int main(void)
{
HMODULE hModule = LoadLibrary(L"C:\\Windows\\system32\\OpenAL32.dll");
uef obj = NULL;
if(hModule != NULL)
{
obj = reinterpret_cast<uef>(GetProcAddress(hModule, "alEnable"));
}
if(obj != NULL)
{
(*obj)(0);
}
if(hModule != NULL)
{
FreeLibrary(hModule);
}
return 0;
}
我怎么能解决这个问题?
PS
另一个主要问题是:
如何在运行时为下次调用动态计算函数地址?
谢谢,
最诚挚的问候!
答案 0 :(得分:1)
首先,存在一个主要问题(因此访问冲突)具有硬编码地址偏移量(const DWORD_PTR offset = 0x00001a90)。不要那样做!你怎么知道由于ASLR而不会改变offsett?