Пишу сервис по сборке.
Когда я вызываю StartServiceCtrlDispatcher, я получаю код ошибки: 3221225477 (C0000005h), который, по моему мнению, является исключением из-за нарушения прав доступа.
Нет ошибок с пустой таблицей и проверены все указатели таблицы.
Так что я думаю, может быть, это как-то связано с соглашением о вызовах WINAPI / sdtcall.
Вызов имеет 2 параметра, поэтому в моем случае они будут четырехзначными словами, всего 16 байтов. Я выключил фреймы стека и очистил 16 байт в ret и все еще нарушил доступ.
Я бродил по интернету из-за возможных причин, пробовал грузы и часами безуспешно. Я надеюсь, что кто-то прочитает это и узнает ответ.
Может быть, я не правильно понимаю соглашение stdcall?
Пожалуйста, ознакомьтесь с моим тестовым кодом, и я с нетерпением жду ваших предложений. Спасибо:)
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
.data
szName db "MyTestService",0
service_table dq QWORD PTR [szName]
dq QWORD PTR [myServiceMain]
dq 0,0
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
.code
myServiceStart PROC
mov rax,rv(StartServiceCtrlDispatcher,service_table)
ret
myServiceStart ENDP
NOSTACKFRAME
myServiceMain PROC
ret 16
myServiceMain ENDP
STACKFRAME
;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
end