我需要确定调用者代码是来自EXE还是DLL。
这里是输出结果。
作为最后一个调用者的代码来自于DLL本身(例如,在DLL中的say_hello函数)。
有没有办法我可以实现这个?
DLL
:动态链接库#ifdef DLL_EXPORTS
__declspec(dllexport) void say_hello();
__declspec(dllexport) void getCurrentModuleName();
#else
__declspec(dllimport) void say_hello();
__declspec(dllexport) void getCurrentModuleName();
#endif
#include <cstdio>
#include <windows.h>
#include <Dbghelp.h>
#include <iostream>
#include <tchar.h>
#include "dll.h"
#include "Psapi.h"
__declspec(naked) void *GetStackPointer()
{
__asm
{
mov eax, esp
ret
}
}
void getCurrentModuleName()
{
BOOL result = SymInitialize(GetCurrentProcess(), NULL , TRUE);
DWORD64 dwBaseAddress = SymGetModuleBase64(GetCurrentProcess(), (DWORD64)GetStackPointer());
TCHAR szBuffer[50];
GetModuleBaseName(GetCurrentProcess(), (HMODULE) dwBaseAddress, szBuffer, sizeof(szBuffer));
std::wcout << _T("--->") << szBuffer << std::endl;
}
void say_hello() {
getCurrentModuleName();
}
EXE
#include <windows.h>
#include <cstdio>
#include "dll.h"
int main() {
printf ("ENTERING EXE CODE...\n");
getCurrentModuleName();
printf ("ENTERING DLL CODE...\n");
say_hello();
getchar();
}
这里是输出结果。
ENTERING EXE CODE...
--->exe.exe
ENTERING DLL CODE...
--->exe.exe
I wish I can get
ENTERING EXE CODE...
--->exe.exe
ENTERING DLL CODE...
--->dll.dll
作为最后一个调用者的代码来自于DLL本身(例如,在DLL中的say_hello函数)。
有没有办法我可以实现这个?
mov eax,[esp]
。 (即,FPO对于naked函数无关)。 - Alex BudovskigetCurrentModuleName
- иҝҷдёӘеҮҪж•°и°ғз”ЁдәҶ GetRASSFFPгҖӮжүҖд»Ҙе®ғжҳҜ getCurrentModuleName зҡ„е Ҷж Ҳеё§иў«д»Јз ҒжҹҘиҜўгҖӮе…¶д»–жЁЎеқ—зҡ„жһ„е»әж–№ејҸ并дёҚйҮҚиҰҒгҖӮ - Chris Becke