我的问题是:DLL是采用远线程注入的方法,
已经成功在远程进程中使用远线程的方法成功装载,
但是,在注入的DLL的DllMain()入口函数中,却不能使用CreateThread()的方法执行DLL中的其他函数,
这些函数中都没有 while 循环,
一般什么情况下这样的方法会失败?
已经成功在远程进程中使用远线程的方法成功装载,
但是,在注入的DLL的DllMain()入口函数中,却不能使用CreateThread()的方法执行DLL中的其他函数,
这些函数中都没有 while 循环,
一般什么情况下这样的方法会失败?
解决方案 »
- 窗体启动的时候如何自动运行combobox的事件
- 如何设置菜单栏的颜色???
- 数学题,会编程的进!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(够醒目)
- 散分贴:庆祝VC小屋一周年同时庆祝小屋姊妹论坛http://bbs.areoc.net开张,近期开通FTP,近10G电子书给大家分享
- 哪里可找到 iphlpapi.h 文件啊?
- 串口中OnComm事件中COleSafeArray转化为VARIANT的小错误,在线等待!!!
- 在Dialog中起另一个Dialog,源Dialog中的代码需继续执行的问题?
- 有关按钮问题的请教!
- CreateStatusWindow()函数在哪个库里啊?我的编译器为什么提示不能连接到这个函数,MSDN上也找不到?
- 多高技术含量的作品比较合适
- VC2008编译出的程序不能在其他机器上直接运行吗?
- CRectTracker超出屏幕范围的问题
非常的郁闷,
其实我的代码很简单,
就是使用 CreateThread() 执行一个 DllThreadFunction() 函数,
DllThreadFunction() 函数中仅仅使用了几句嵌入汇编,最后用 memcpy() 对远程进程的代码进行了写操作,
其实代码就很简单的几行,就不贴出来了,
主要想听听大家的真知灼见,
有什么原因会失败?
if( hThread == 0 )
{
MessageBox()...
}
然后这个 MessageBox() 总是弹出来...
{
MessageBox()...
}然后这个 MessageBox() 总是弹出来...
hDllThread = ::CreateThread( NULL, 0, (LPTHREAD_START_ROUTINE)(&DllThreadFunction), NULL, 0, &DllThreadId );
if( hDllThread == 0 )
{
MessageBox()...
}这个 MessageBox 会永远弹出来...
至少你得在失败后用GetLastError得到当前错误码,并且用下面帖子中35楼得方法把错误信息报告出来http://topic.csdn.net/u/20100602/09/325d1209-b8d5-44c9-a69a-c647eb5b0d6b.html
包含头文件 Windows
DWORD __stdcall ThreadOne(LPVOID lParam)
{
//函数体
}
现在把问题原因写出来,给大家提供参考,原因就是 Visual Studio 2005 的 SDK 省略了 DllMain() 入口函数的一些代码,
当时 DllMain() 创建时, 是个空函数,
参考了 Jeffrey Richter 的书, 在 DllMain() 中自己手动添加如下代码就可以了:
switch( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH:
// 在此处创建线程
break;
case ...
}