источник не найден initsect.cpp
Я пытаюсь изучить сборку (MASM x64) и написал простой код.
.code
main proc
mov rax, 1
mov rcx, 2
mov rdx, 0
div rcx
ret 0
main endp
end
Теперь я начал процесс отладки, чтобы убедиться, что он работает (так как другого способа проверить, работает ли что-то, нет), и в строке div rcx отладчик начал перетаскивать меня через некоторые файлы с именами exe_common.inl, file_mode.cpp, обратно к exe_common.inl, matherr.cpp, снова к exe_common.inl, utility.cpp и снова exe_common.inl(что это за???????). В этот момент есть блок кода препроцессора
#ifdef _RTC
_RTC_Initialize();
atexit(_RTC_Terminate);
#endif
и в _RTC_Initialize(); (вторая строка), программа завершает работу с сообщением initsect.cpp not found. Что, черт возьми, это значит???? Stackru показывает великолепные результаты 0 о "initsect.cpp not found", и Google тоже не помогает. Очевидно, то же самое всегда происходит, когда строка с ret пытается выполнить. Я стер 0 после ret, стер все между main proc и main endp и стер строку ret. всегда одно и то же. Это происходит, когда строка перед main endp пытается выполнить, независимо от того, что это такое. Это даже происходит с помощью самого простого кода в мире:
.code
main proc
ret 0
main endp
end
Я использую Microsoft Visual Studio 2019 и процессор AMD x64-x86.
1 ответ
Планируете вы это или нет, но вы связали свою программу со средой выполнения Visual Studio C++. Код, который вы выполняете, выполняет начальную инициализацию, необходимую для правильной работы среды выполнения C++ и программ C++. В конце концов, как только это будет завершено, он позвонит вамmain
как если бы вы создали программу на C++.
Росс Ридж был прав, ассемблер, очевидно, связал программу со средой выполнения C. Он забыл сказать, что мне нужно установить точку входа с помощью _START: чтобы избежать этого, спасибо всем за помощь (иронично) и особенно спасибо за DFpercush на Youtube(не иронично).