比如我的dll里有这么一个导出函数extern "C" __declspec(dllexport) void Show() 

AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
CMyDlg dlg; 
dlg.DoModal(); 

现在注入到其他进程以后我想得到这个函数的地址并且执行之
不知道该怎么操作
多谢指点!!

解决方案 »

  1.   

    你怎么执行?你想控制对方进程的线程?
    首先现在本进程获得Show的地址,然后减去模块基址获得偏移。
    注入对方进程后(用LoadLibrary注入)可获得模块基址,相加就可以获得该函数地址了。。最简单还是在dllmain里面起一个线程执行之。
      

  2.   

    ::CloseHandle(::CreateThread(NULL,NULL,ThreadPro,this,NULL,NULL));然后在ThreadPro里执行上面的函数
    这种方式可行吗?
    我试过MS不行啊
      

  3.   

    既然是export的,可由注入器来调用这个函数
      

  4.   

    既然函数和注入dll在一起,直接调用就好了,还要导出导入的干什么
      

  5.   

    你想在哪个线程中调用这个函数,如果是在你自己的EXE的线程中,直接调用这个函数就可以;如果要在注入的线程中,可以通过消息或者命名事件实现进程间通讯来调用。
      

  6.   

    我试过在dll的InitInstance中调用和在exe中直接调用
    都不行的,不知道是不是调用方式不对
      

  7.   

    最好是在dll注入的时候直接在dll里能调用这个函数;不然的话我就是想得到这个函数在注入其他进程以后的地址我觉得这不是个难题啊
    能有人给几句核要代码吗
      

  8.   

    先在调用程序中定义此函数
    如:typedef void *Show(); 在读取此函数的地址:Show show;
    show = (Show)GetProcAddress(LoadLibrary("XXX.Dll"),"Show");
    show();
      

  9.   

    LS这种做法得到的地址是不对的啊
    每次加载的时候得到的地址都是不同的
    我注入到其他进程去这个地址就不同了
    不像kernel32到哪都相同
      

  10.   

    如果要在注入的时候调用,就在应用程序类的InitInstance里面CWinApp::InitInstance()之后调用就可以了。