首页
社区
课程
招聘
[求助]关于创建远程线程的问题
发表于: 2013-5-16 11:28 3909

[求助]关于创建远程线程的问题

2013-5-16 11:28
3909
我一般用CreateRemoteThread来注入DLL,因为LoadLibrary恰好需要一个参数

HANDLE WINAPI CreateRemoteThread(
  _In_   HANDLE hProcess,
  _In_   LPSECURITY_ATTRIBUTES lpThreadAttributes,
  _In_   SIZE_T dwStackSize,
  _In_   LPTHREAD_START_ROUTINE lpStartAddress,
  _In_   LPVOID lpParameter,
  _In_   DWORD dwCreationFlags,
  _Out_  LPDWORD lpThreadId
)
其中的 _In_   LPTHREAD_START_ROUTINE  lpStartAddress 函数解释是
lpStartAddress [in]
A pointer to the application-defined function of type LPTHREAD_START_ROUTINE to be executed by the thread and represents the starting address of the thread in the remote process. The function must exist in the remote process. For more information, see ThreadProc.

也就是ThreadProc必须是
DWORD WINAPI func(LPVOID p)类型的.
我今天写了一个 void func();
然后远程创建线程,   LPVOID lpParameter,填写的NULL,为什么不会崩溃?
照理说PUSH了一个lpParameter,但是我的void func没有 RETN 4,堆栈应该不平衡啊。

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 242
活跃值: (16)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
RETN 4 是先返回 再ESP+4 这样只是你PUSH进去的那个NULL参数没有被弹出而已,返回地址什么的全都正常。
远程线程会调用 RtlExitUserThread 后面不平衡也没啥影响。不信你试试。
2013-5-16 11:56
0
雪    币: 1392
活跃值: (5212)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
3
返回地址的确正常。但是NULL没有被弹出,是随后线程就退出了吗?。
2013-5-16 13:12
0
雪    币: 242
活跃值: (16)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
嗯 ThreadProc 调用完之后 很快就跑到 RtlExitUserThread  了
2013-5-16 13:15
0
雪    币: 1392
活跃值: (5212)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
5
谢谢鸟~
2013-5-16 13:45
0
游客
登录 | 注册 方可回帖
返回
//