如何判断一个Dll是否被另外一个Dll调用了 在一个进程中有两个DLL(不妨叫DllA 和 DllB),如何在DllA中判断DllB 是否调用了DllA中的函数?请高手指教! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1。反汇编2。函数地址查询(VirtualQueryInfo)3。验证函数是否在某个dll模块中, 通常模块句柄,是加载进入进程的基址。 ULONG addr; _asm mov eax, [ebp+4] _asm mov addr, eaxaddr就是调用者的地址,用VirtualQueryInfo配合GetModuleFileName就能取到模块名.上面的代码只要加到DLLA的函数中. 用VirtualQueryInfo配合GetModuleFileName就能取到模块名====================================================能不能说得清楚点,我是菜鸟.谢谢:) KeSummer的意思是从Frame Pointer(ebp)上找到Caller的返回地址,假设你的函数是直接被另外 DLL 叫到,这个返回地址肯定是那个 DLL代码段的地址,通过VirtualQueryInfo(Ex)可以找到这个 DLL 的基础地址 (自己去查查MSDN,第一个参数传人GetCurrentProcess()),然后把这个基础地址传给GetModuleFileName。注意这个方法不一定保险。Compiler很多时候在Release Build的时候会做优化(Frame Pointer Optimization),如果这样 ebp里面不会有返回地址,这个方法就不灵了。 使用__declspec(naked)定义函数,函数入口处直接使用[esp]为调用者的返回地址.只要调用的时候不这样:push xxx ret当然__declspec(naked)定义时,写函数很麻烦 不知道你是不是一定要在程序中察看,如果不是的话我觉得可以用dependency walker啊,不是很简单吗? 完全同意KeSummer只要使用Call 的都可以用是KeSummer 怎么得到菜单当前选中项 有没vc操作excel函数的帮助文档 p2p发送心跳包 为什么HttpQueryInfo获取文件大小和最后修改时间失败 散分,勿忘国耻,勿忘九一八 如何模拟按钮按下? 求段救命的代码!俺就300分 都散了~ (关于绘图界面及调用ie) 如何实现截取double的小数位?! 怎样对SqlServer中的存储过程的结果进行读取 关于网络密码 请问一般软件合同中,测试异议期与维护期的时间分别是多长? 连sql sever 2000执行SQL语句问题
2。函数地址查询(VirtualQueryInfo)
3。验证函数是否在某个dll模块中, 通常模块句柄,是加载进入进程的基址。
_asm mov addr, eaxaddr就是调用者的地址,
用VirtualQueryInfo配合GetModuleFileName就能取到模块名.上面的代码只要加到DLLA的函数中.
====================================================
能不能说得清楚点,我是菜鸟.谢谢:)
只要调用的时候不这样:
push xxx
ret
当然__declspec(naked)定义时,写函数很麻烦