我正在尝试在注入的 DLL 中重写以下函数。
mov edi,edi
push ebp
mov ebp,esp
mov eax, [sound.dll+1AE0]
push eax
mov ecx,[ebp+08]
mov eax,[ecx]
mov eax,[eax+0C]
push eax
call sound.dll+7C640
pop ebp
ret 0004
我正在通过 CreateRemoteThread 加载我的 DLL。有没有办法在加载DLL时获取sound.dll+1AE0(或linkage)的地址,而不必做GetModuleHandleEx并动态计算地址?
也许有一些进口或一些链接工件?
谢谢!
编辑:
GetModuleHandleEx 方法将如下所示:
DWORD mem1AE0=0;
用 sound.dll+1AE0 地址加载 mem1AE0
然后在我的函数中:
_declspec(naked) void MyFunction() {
__asm {
mov edi,edi
push ebp
mov ebp,esp
mov eax, mem1AE0
mov eax, [eax]
push eax
mov ecx,[ebp+08]
mov eax,[ecx]
mov eax,[eax+0C]
push eax
call sound.dll+7C640
pop ebp
ret 0004
}
}
问题是当我有一个调用 [sound.dll+XXXX] 指令时
在这种情况下,我需要创建一个指向该内存的变量
DWORD memXXXX=0;
用正确的地址加载它并创建一个proxycall DWORD
DWORD memXXXX_content=0;
然后做:
push eax
mov eax, memXXXX
mov eax, [eax]
mov memXXXX_content, eax
pop eax
call memXXXX_content
这是完全低效的,除非我做错了什么?
谢谢
编辑:我相信如果您动态加载 DLL,则无法获得静态链接。