小弟最近在网上看到一个贴帖子是关于API函数 _ReturnAddress()的,不过是C++的,
链接:http://blog.csdn.net/wwwdotfa/article/details/7564113我找了好长时间,在Delphi中也没找到相似的函数,#include "stdafx.h"
#include "intrin.h"#pragma intrinsic(_ReturnAddress)HMODULE APIENTRY GetRAMH()
{
HMODULE hm = NULL;
void *callerAddress = _ReturnAddress();
::GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)callerAddress, &hm);
return hm;
}希望哪位大侠能找到这个_ReturnAddress() API函数
链接:http://blog.csdn.net/wwwdotfa/article/details/7564113我找了好长时间,在Delphi中也没找到相似的函数,#include "stdafx.h"
#include "intrin.h"#pragma intrinsic(_ReturnAddress)HMODULE APIENTRY GetRAMH()
{
HMODULE hm = NULL;
void *callerAddress = _ReturnAddress();
::GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)callerAddress, &hm);
return hm;
}希望哪位大侠能找到这个_ReturnAddress() API函数
http://www.cnblogs.com/JefferyZhou/archive/2012/09/24/2700303.html看看哪位高人能用Delphi 写一个,
试试下面的代码
var
callerAddress : Pointer ;
...
asm
mov EAX,EBP
mov &callerAddress,EAX
end ;
——每次以__function__这个宏作为它的实参(有些c的编译器有这个宏,delphi就不知道了)
补充说明一下,高级语言调用函数时,一般会先将返回地址入栈,然后是参数入栈。
只需在栈中找到返回地址就可以了。如果不是EBP,就是别的寄存器。去查查资料。
GetModuleHandleEx貌似只有特定版本windows才支持吧.
#include "intrin.h"#pragma intrinsic(_ReturnAddress)HMODULE APIENTRY GetRAMH()
{
HMODULE hm = NULL;
void *callerAddress = _ReturnAddress();
::GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)callerAddress, &hm);
return hm;
}
不要拘泥于_ReturnAddress();在D中怎么用,知道在C中怎么用做出DLL来再在D中用吧。
我也想写一个C++的dll,然后用delphi调用,貌似intrin.h 在VC++6.0里面没有,找了半天也没找到
我是想把这个技术用在HOOKAPI技术上,我要监视一个软件各个模块的API调用情况,所以自己没法改变参数
VC6下面确定是没有,我用的VC2008下面是有的,如果有条件可以装个VS2008