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 ответов

24 просмотра

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

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

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

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

Мужики и девушки, привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных...
Kraszx
14
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
А вот это что за конструкция? Вернее, она тут нафига?
Serjone
10
Привет. Подскажите, как правильно сматчить лист фиксированного размера, чтобы компилятор не говорил мне о неполном паттерне? Допустим что-то такое [x', y'] = sort [x, y]?
Arseny
8
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Мужики. привет) в Вelphi xe7 в настройках во вкладке "Editor Options" далее " Color" есть список: "Elements", открыв который мы можем настраивать отображение разных элементов...
Kraszx
2
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Карта сайта