Skip to content

Commit cf916db

Browse files
authored
Merge pull request #964 from shyoshyo/fix_windows_thread_x64_parameter
[+] fix windows multi-thread on x64 providing wrong parameters
2 parents c129833 + 45cea13 commit cf916db

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

qiling/os/windows/thread.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,16 +84,17 @@ def create(self, func_addr, func_params, status):
8484
stack_size = 1024
8585
new_stack = self.ql.os.heap.alloc(stack_size) + stack_size
8686

87+
self.saved_context = self.ql.reg.save()
88+
89+
# set return address, parameters
8790
if self.ql.archtype == QL_ARCH.X86:
8891
self.ql.mem.write(new_stack - 4, self.ql.pack32(self.ql.os.thread_manager.THREAD_RET_ADDR))
8992
self.ql.mem.write(new_stack, self.ql.pack32(func_params))
9093
elif self.ql.archtype == QL_ARCH.X8664:
9194
self.ql.mem.write(new_stack - 8, self.ql.pack64(self.ql.os.thread_manager.THREAD_RET_ADDR))
92-
self.ql.mem.write(new_stack, self.ql.pack64(func_params))
93-
94-
# set eip, ebp, esp
95-
self.saved_context = self.ql.reg.save()
95+
self.saved_context["rcx"] = func_params
9696

97+
# set eip/rip, ebp/rbp, esp/rsp
9798
if self.ql.archtype == QL_ARCH.X86:
9899
self.saved_context["eip"] = func_addr
99100
self.saved_context["ebp"] = new_stack - 4

0 commit comments

Comments
 (0)