169 похожих чатов

Fasm портит подобные конструкции: lea rdx,[metka] invoke MessageBoxA,0,0,rdx,0 Генерирует он тут следующее: mov rcx,0

; 1 аргумент
mov rdx,0 ; 2 аргумент - загружен в rdx
mov r8,rdx ; 3 аргумент - но к этому моменту он уничтожен
mov r9,0 ; 4 аргумент
call qword ptr ds:[<&MessageBoxA>]
Как решать это проблему автоматически?
Или хотя бы чтобы он выдавал сообщение об ошибке, а не по тихому портил бы код.

11 ответов

30 просмотров

Никак, только ручками. Или не использовать 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 хотя эт больше для лок. данных на стеке хотя все равно надо учитывать используемые регистры

ошибка не у него, ошибка у тебя. асм сделал ровно то что ьы ему сказал, синтаксических ошибок нет

Евгений- Автор вопроса
Aiwan \ (•◡•) / _bot
ошибка не у него, ошибка у тебя. асм сделал ровно ...

Асм мог бы учесть занятые регистры и заполнять регистры 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 аргумент

Евгений- Автор вопроса
Денис Фомин Fomin
Что то такое припоминаю, что по какому то там стан...

Это не так, там тоже есть соглашение по регистрам как и в 32бит. rax, rcx, rdx, r8, r9, r10, r11 - можно портить rbp, rsi, rdi, rbx, r12, r13, r14, r15 - не портятся при вызовах API, и при использовании надо сохранять в процедурах

Евгений
Асм мог бы учесть занятые регистры и заполнять рег...

ты всегда можешь это (проверки, контроль) сделать сам, дополнив макросы. то о чем ты говоришь занимаюися компили ЯВУ

Евгений
Асм мог бы учесть занятые регистры и заполнять рег...

Асм мог бы учесть занятые регистры регистры всегда чем то заняты. даже в "пустом" регистре содержится ноль либо мусор. а что именно содержится в регистре (нужное или нет) определяет программист. и раз ты портишь rdx значит ты знаешь что делаешь

Денис Фомин Fomin
Что то такое припоминаю, что по какому то там стан...

скорее всего ось их не будет трогать, либо обнулит, это же потенциальная дыра в безопасности

disba1ancer
скорее всего ось их не будет трогать, либо обнулит...

Да вот где то что то такое читал, не могу теперь вспомнить где :)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта