Проблема с созданием потока 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


Ответы (0 шт):