我写了一个hook在dll中,需要向dll中设置一些初始变量值,在共享数据段中
#pragma data_seg(".MYDATA")
共享数据段内容
#pragma data_seg()
此时,当hook到某些特定的消息时,如果这些消息是由调用dll的应用程序触发的,能反映出这些变量已被初始化,但,如果是其他程序触发的,变量则好像没有初始化!
当我加上#pragma comment(linker,"/SECTION:.MYDATA,RWS")
这一句时,就更本反映不出这些变量被初始化了!
我觉得应该是共享数据段设置的问题,但是不知道问题出在哪里,麻烦大家帮帮忙,很急的!
#pragma data_seg(".MYDATA")
共享数据段内容
#pragma data_seg()
此时,当hook到某些特定的消息时,如果这些消息是由调用dll的应用程序触发的,能反映出这些变量已被初始化,但,如果是其他程序触发的,变量则好像没有初始化!
当我加上#pragma comment(linker,"/SECTION:.MYDATA,RWS")
这一句时,就更本反映不出这些变量被初始化了!
我觉得应该是共享数据段设置的问题,但是不知道问题出在哪里,麻烦大家帮帮忙,很急的!
我是研究BCB的,钩子我做过。
这句需要加上~
还有
你要共享的数据段需要初始化~
否则系统会把它放在一个未初始化的段里面~
就没有意义了~
如果是空值那就要赋值成NULL~
#pragma data_seg(".MYDATA")
CString strSoapProcId="";
#pragma data_seg()
#pragma comment(linker,"/SECTION:.MYDATA,RWS")
BOOL __declspec(dllexport)__stdcall SetHwndSoapProcId(CString SoapProcId)
{
strSoapProcId=SoapProcId;
return TRUE;
}在应用程序中,先调用设置该strSoapProcId变量初值,然后,设置hook,每次触发钩子时,我都把该变量的值绘制到桌面上,但是,每次都得不到想要的结果,总是显示“strcore.cpp”这些东西,根本不是我传进去的值!
大家帮忙亚!
改成
CString strSoapProcId=NULL;
行吗?
CString不支持吧~
换成DWORD~
并没有设置成功?
大家帮帮忙亚!
DWORD strSoapProcId=NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:.MYDATA,RWS")BOOL __declspec(dllexport) __stdcall SetHwndSoapProcId(DWORD SoapProcId)
{
strSoapProcId = SoapProcId;
return TRUE;
}