首页
社区
课程
招聘
[求助]怎么修改主程序让它获得某个dll里的变量地址。
发表于: 2009-7-14 22:07 4832

[求助]怎么修改主程序让它获得某个dll里的变量地址。

2009-7-14 22:07
4832
我是纯业余的。
现在改了一个程序,我让它在处理某个过程的时候把某个值储存到我写的API拦截dll里。我已经在dll里声明了一个静态变量(类型short)。然后在程序里用汇编mov指令把值存到这个变量里。但是似乎稍微改点程序的设置文件那个变量的地址就变了。每次都不一样。
有什么好办法解决吗?这个处理过程要经常被调用所以不想效率太低。或者有什么其它方法实现,我就是想获得某个临时数据。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
2
PVOID KGetGlobalVarAddr(PVOID pVar)
{
    PVOID pCurAddr = NULL;
    __asm
    {
        Start:
        call lbl_Next
        lbl_Next:
        pop eax
        sub eax, 5
        sub eax, offset Start
        add eax, pVar
        mov pCurAddr, eax
    }
    return pCurAddr;
}
2009-7-15 01:32
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
自己解决了,利用一个被拦截的API获得临时数据。
dll里:
// SetBkMode
extern "C" int __stdcall  __E__10__(HDC cdx,int mode)
{

        if (mode==0xff){
                m_LastData=(int)cdx;
                return 0;
        }
//-------------------------------------------------------------
     typedef int (__stdcall *pS)(HDC cdx,int mode);
     pS pps = (pS)p[10];
     int rv = pps(cdx,mode);

     return rv;

}
主程序里加入
push    ecx
  push    0FF
  push    eax
  call SetBkMode
  pop     ecx

不过话说这样好像不太安全
2009-7-15 17:53
0
游客
登录 | 注册 方可回帖
返回
//