来自汇编程序的 Win32 Kernel32.CreateThread
Hi to all....
////////////////////////////////////////////
PUSH 214D84DD // thread id address out
PUSH 0
PUSH 0
PUSH 214D84CD // my function address to run in the thread
PUSH 0
PUSH 0
CALL DWORD PTR DS:[4EBD1204] // KERNEL32.CreateThread
waiting_label:
NOP
JMP waiting_label
////////////////////////////////////////////
我已经在我的函数(214D84CD)上放置了一个断点,但是在 CreateThread 之后,在“等待循环”中我的函数没有被调用。 否则,如果我在 CreateThread 之后调用具有许多其他线程的应用程序(而不是等待循环),则会调用我的函数。
为什么?有一些“DoEvents”api 强制在我的循环中调用我的线程函数吗?
线程ID(214D84DD)和返回值EAX不为空。 我在调试器(OllyDbg)中运行我的应用程序。而且我没有使用任何编译器。
非常感谢, 里卡多
Hi to all....
////////////////////////////////////////////
PUSH 214D84DD // thread id address out
PUSH 0
PUSH 0
PUSH 214D84CD // my function address to run in the thread
PUSH 0
PUSH 0
CALL DWORD PTR DS:[4EBD1204] // KERNEL32.CreateThread
waiting_label:
NOP
JMP waiting_label
////////////////////////////////////////////
I have put a breakpoint on my function (214D84CD), but after the CreateThread, in the "waiting loop" my function is not invoked.
Otherwise, if I call after CreateThread my application (and not the waiting loop) with many others threads, my function is invoked.
Why? There is some "DoEvents" api to force in my loop to call my thread function?
The thread id (214D84DD) and the return value EAX are not null.
I'm run my application in a debugger (OllyDbg). And I'm not using any compiler.
Many thanks,
Riccardo
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
你把它们传错了。由于在 stdcall 中,您必须以相反的顺序推送参数,因此应该首先推送 lpThreadId。因此 214D84CD 和 214D84DD 应该翻转。
you are passing them wrong. Since in stdcall, you have to push the argument in a reverse order, lpThreadId should be pushed first. Thus 214D84CD and 214D84DD should be flipped.
您必须通过“线程”窗口手动切换到新创建的线程。
You have to manually switch to the newly created thread via the 'threads' window.
是因为 CreateThread 位于 DLL 的初始化例程中.... :(
"在进程启动和 DLL 初始化例程期间,可以创建新线程,但直到为进程完成 DLL 初始化后,它们才会开始执行。"
< a href="http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx
Is because the CreateThread is in the initialization routine of a DLL.... :(
"During process startup and DLL initialization routines, new threads can be created, but they do not begin execution until DLL initialization is done for the process."
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453%28v=vs.85%29.aspx