VS内联汇编调用call求助
这是OD反汇编中的两处代码,他们是两个call汇编代码
0043032B FF15 30157E00 call dword ptr ds:[<&WINMM.timeGetTime>]
VS2017中,这么写肯定是不行的,我要怎么写
//汇编调用游戏内部call的统一接口
UINT_PTR _cdecl asmCalltimeGetTime()
{
UINT_PTR retvar = 0;
__asm
{
call dword ptr ds:[<&WINMM.timeGetTime>]
mov retvar, eax
}
return retvar;
}
汇编代码
0040EB95 E8 F66C1C00 call <jmp.&WINMM.timeGetTime>
UINT_PTR _cdecl asmCalltimeGetTime()
{
UINT_PTR retvar = 0;
__asm
{
call <jmp.&WINMM.timeGetTime>
mov retvar, eax
}
return retvar;
}
我该怎么写?
第一个call好像查阅了一些资料,估计能搞定,
获得模块地址,再获得函数地址,调用,
是这么回事吗?
第二个怎么弄,各位帮忙! 经测试,第一个call,一下代码均可用
void CPAGE00::OnBnClickedButton57()
{
DWORD tmp, addr;
tmp = timeGetTime();
printf("VS timeGetTime%08X\n", tmp);
_asm
{
call timeGetTime
mov tmp, eax
}
printf("asm timeGetTime%08X\n", tmp);
addr = (UINT32)timeGetTime;
_asm
{
call addr
mov tmp, eax
}
printf("asm2timeGetTime%08X\n", tmp);
printf("timeGetTime addr= %08X\n", addr);
//LoadLibraryA("WINMM.dll");
HMODULE hmd = GetModuleHandleW(L"WINMM.dll");
ULONG addr2 = (ULONG)GetProcAddress(hmd, "timeGetTime");
_asm
{
call addr2
mov tmp, eax
}
printf("asm2timeGetTime%08X\n", tmp);
printf("timeGetTime addr2 = %08X\n", addr2);
} 66666666666666666 本帖最后由 blbljj008 于 2023-4-11 19:21 编辑
研究一天原来第二种和第一种是一个意思,两种写法,了解的大神,给讲讲区别,我看是一样的,没有跟我遇到一样问题的吗?就是直接call,和call跳一下,是什么意思,有什么不一样
页:
[1]