dll中的函数可以知道是哪个程序调用自己了吗

隐者神归 2007-06-04 03:53:05
不使用函数参数的方式调用外
...全文
202 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
God4 2007-06-05
  • 打赏
  • 举报
回复
GetCurrentProcessId()获得id,OpenProcess()获得句柄。
wltg2001 2007-06-05
  • 打赏
  • 举报
回复
用GetModuleHandle(NULL)能返回调用进程的HMODULE,至于这个返回值能得到什么就不知道了.
feimingbiao 2007-06-05
  • 打赏
  • 举报
回复
如果调用程序直接是.exe,当然可以用GetModuleFileName,或者通过Process信息得到。不过楼主大概是问哪个DLL。
God4 2007-06-05
  • 打赏
  • 举报
回复
上面说错了,开始是用GetCurrentProcessId()。
God4 2007-06-05
  • 打赏
  • 举报
回复
GetProcessThreadId()取得当前进程id,然后OpenThread也能取得句柄。就能获得调用程序的路径。
feimingbiao 2007-06-04
  • 打赏
  • 举报
回复
有一个办法,不是100%可靠。

就是通过Stack Walk找到第一个栈上不是你Module的地址。假设你的函数不是自己叫的,你可以根据Frame Pointer的值(ebp) 找到你这个函数的返回地址,这个地址应该是调用你函数的程序的执行段地址。根据这个地址就可以得到程序的信息。

这个方法不是十分有把握,如果你的函数经过FRO(Frame pointer optimization)了,这个信息就找不到了。
  • 打赏
  • 举报
回复
不知道
eduyu 2007-06-04
  • 打赏
  • 举报
回复
GetModuleHandle,GetModuleFileName

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧