函数定义:
void SendPackage(LPVOID lPara)
{
}代码:
InjectThread(SendPackage,&sPackage); 这句执行时SendPackage值也就是函数地址为0x009eb020读取:
void CCallManager::InjectThread(void *pFun,void *pData)
{
在这读取到pFun的值为0x009d7c6b,而不是0x009eb020,为什么?
}

解决方案 »

  1.   

    VC生成的代码里面有一张类似于函数表之类的东西,列出了程序中的所有函数。它的内容类似于:
    jmp xxx
    jmp xxx
    ......这个xxx就是实现这个函数的代码的实际位置。在你的例子里就是:
    0x009eb020:  jmp 009d7c6b(SendPackage)SendPackage开始
    0x009d7c6b:   push ebp
    ............
    你在ide里看到的SendPackage显示的就是第一个地址,把它做为参数时,传递的当然就是0x009d7c6b这个地址了。
      

  2.   

    实际上和楼上说的恰恰相反,0x009eb020所指向的地址是函数的实际代码,0x009d7c6b是jmp xxx,我怎么做才能让pFun指向函数的实际代码呢,因为要把SendPackage函数注入到远程进程执行
      

  3.   

    远程进程执行
    没有必要发个函数地址吧,发了估计也没用,那个地址到别的程序里是无效的,你别看有jmp指令那没用
    直接双方建立一个函数索引表不就可以了嘛
    至于函数参数本机可以用共享内存,远端机器可以通过网络发给它啊
    ===================================================================
    哦你想实现代码注入功能这我没有研究过,以上算我白说了呵呵