Проблема с созданием потока MASM 64-бит
Недавно начал учить MASM 64-bit, решил изучить создание потоков.
Ну и я захотел "взаимодействовать" с C++ кодом используя поток, то есть "просчитать" код на MASM, а вывести в консоль результат на C++ и я столкнулся с такой ошибкой в Visual Studio:
Вызвано исключение по адресу 0x00007FF7A9AE1347 в ASMTute1.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFFFFFFFFFFFFFFF8. Необработанное исключение по адресу 0x00007FF7A9AE1347 в ASMTute1.exe: 0xC0000005: нарушение прав доступа при записи по адресу 0xFFFFFFFFFFFFFFF8.
Код на MASM:
.data
extern CreateThread: proc
.code
ThreadStartProc proc
inc dword ptr [rcx]
ret
ThreadStartProc endp
CreateThreadInASM proc
push rbp ; save the caller's RBP
mov rsp, rbp ; save rbp in stack frame to rbp
push 0 ; thread id
push 0 ; thread flags, start immediatly (nemedlenno)
sub rsp, 20h ; reserve 4 quads of the shadow space
mov rcx, r9 ; move i* to r9
mov rcx, 0 ; security attributes
mov rdx, 0 ; stack size, use the same stack size as the calling thread
mov r8, ThreadStartProc
call CreateThread
mov rsp, rbp
pop rbp ; restore
ret
CreateThreadInASM endp
end
Код на C++:
#include <iostream>
using namespace std;
extern "C" int CreateThreadInASM(int* i);
int main() {
int i = 0;
CreateThreadInASM(&i);
while(i == 0) {}
cout << "operation: " << i << endl;
return 0;
}
Код останавливается на: push 0 ; thread id