; 1 аргумент
mov rdx,0 ; 2 аргумент - загружен в rdx
mov r8,rdx ; 3 аргумент - но к этому моменту он уничтожен
mov r9,0 ; 4 аргумент
call qword ptr ds:[<&MessageBoxA>]
Как решать это проблему автоматически?
Или хотя бы чтобы он выдавал сообщение об ошибке, а не по тихому портил бы код.
Никак, только ручками. Или не использовать invoke, а самому контролировать передаваемые параметры
lea rdx,[metka] mov r8, rdx invoke MessageBoxA,0,0,r8,0 код mov r8, r8 не генерируется инвоуком
Что то такое припоминаю, что по какому то там стандарту типа fastcall регистры выше r7 активно юзаются ОС поэтому там может быть что угодно в любой момент времени! Еще от ос зависит вроде. Хотя это не точно!
попробуй invoke MB,0,0, addr metka,0 хотя эт больше для лок. данных на стеке хотя все равно надо учитывать используемые регистры
ошибка не у него, ошибка у тебя. асм сделал ровно то что ьы ему сказал, синтаксических ошибок нет
Асм мог бы учесть занятые регистры и заполнять регистры fastcall в другой последовательности либо хотя бы уведомлять об этом. Вместо mov rcx,0 ; 1 аргумент mov rdx,0 ; 2 аргумент - загружен в rdx mov r8,rdx ; 3 аргумент - но к этому моменту он уничтожен mov r9,0 ; 4 аргумент мог бы делать mov rcx,0 ; 1 аргумент mov r8,rdx ; 3 аргумент mov rdx,0 ; 2 аргумент mov r9,0 ; 4 аргумент
Это не так, там тоже есть соглашение по регистрам как и в 32бит. rax, rcx, rdx, r8, r9, r10, r11 - можно портить rbp, rsi, rdi, rbx, r12, r13, r14, r15 - не портятся при вызовах API, и при использовании надо сохранять в процедурах
ты всегда можешь это (проверки, контроль) сделать сам, дополнив макросы. то о чем ты говоришь занимаюися компили ЯВУ
Асм мог бы учесть занятые регистры регистры всегда чем то заняты. даже в "пустом" регистре содержится ноль либо мусор. а что именно содержится в регистре (нужное или нет) определяет программист. и раз ты портишь rdx значит ты знаешь что делаешь
скорее всего ось их не будет трогать, либо обнулит, это же потенциальная дыра в безопасности
Да вот где то что то такое читал, не могу теперь вспомнить где :)
Обсуждают сегодня