首页 > 解决方案 > x64 从 asm 调用 createthread

问题描述

push 0 //tid
push 0 //flag
sub rsp, 20
mov r9,0 //parameter
mov rcx,0 //security attribute
mov rdx, 0 //stacksize
mov r8,threadmem //address
call kernel32.createthread

我以这种方式调用createthread。

但是如果我在参数中输入任何地址,我的代码就不起作用。只是让我的电脑滞后而没有任何反应,似乎创建了线程但我的代码没有执行。但是,如果我不输入参数并将其自身保留为 0,它就可以工作。谁能帮我?

标签: windowsassemblyx86-64

解决方案


您没有严格遵循 x64 调用约定。push 和 sub rsp 可能只出现在 prolog 中。

Windows 会反汇编您的代码,无法访问的代码仍然会因此而挂起。我不得不完全放弃。


推荐阅读