当我用 Ida 查看 exe 文件时,我看到
call dword ptr [ebp -70p]
那是什么?为什么这个函数由 ebp 调用而不是call sub_0xabcd
我怎么知道哪个函数是进入这个函数的,看看那里会发生什么?
当我用 Ida 查看 exe 文件时,我看到
call dword ptr [ebp -70p]
那是什么?为什么这个函数由 ebp 调用而不是call sub_0xabcd
我怎么知道哪个函数是进入这个函数的,看看那里会发生什么?
造成这种情况的原因可能有很多,从无害的方法指针作为局部变量到混淆(您展示的程序集极不可能)。至于如何跟随它,您可以BP呼叫并跟随它或跟踪帧指针以查看它的设置。
call带有局部变量的指令表明它可能是函数指针。但是函数指针可以在很多情况下使用。最简单的例子是原始 C 风格的函数指针。
cl.exe /MDd file.c#include <stdio.h>
void func(int a) {
printf("%d\n", a);
}
int main(void) {
void (*func_ptr)(int) = &func;
(*func_ptr)(10);
}
mov dword ptr [ebp-4], offset func ; move function pointer to stack
push 10 ; push 10 for first parameter
call dword ptr [ebp-4] ; call the function pointer
add esp, 4
其他情况:
GetProcAddress()
获取导出函数地址的函数来返回。怎么知道那里发生了什么?将其加载到调试器中。在该间接调用中设置断点并遵循其执行过程。也判断其他子程序。