х86 передаваться в регистрах? Я почитал в интернетах, и судя по написанному, структура как параметр всегда передаётся на стеке. Но вот как возвращаемый тип, может быть и в регистрах. Что на практике - особо не понятно, но судя по всему, нет. Через godbolt теперь не проверить, там не осталось компилей х86, только х86_64
В ассемблере можно всё.
я вообще хотел проверить через IR в llvm, потому что мне это надо для кодогенерации на нём же. там соглашение о вызовах, к сожалению, влияет на то, чтт надо генерировать
но тогда это не будет cdecl
Может, попробуй вернуть struct { int x, y;}. 32 битные компиляторы на месте. Кое-где есть -m32.
Почему это? Тебе показать, как можно структуру вернуть в регистре?
т.е. взять x86_64 компиль и добавить флаг -m32?
я про "возможно всё"
Да. Не слинкуется (либ нет), но ведь и не нужно.
Ну, да. А зачем этот cdecl? Не существует этого всего, тебе скорее в чат по С тогда.
большое спасибо, проверю
там наверно не шарят за низкоуровневую кодогенерацию, хз
😁 Это только на пользу моим аргументам, согласен. Не разбираются. Но пару человечков найдёшь.
Я не забуду тебе напомнить в следующий раз, что сишных либ в асме не существует, ладно?
Не ладно. Это не Сишные либы, это кто-то мне подкинул бинарник, в котором почему-то решил предавать аргументы так.
divmod есть такое. У тебя асм, ты вызвал это. Где остаток?
Это что такое? Я такое не вызывал нигде.
Какая-то сишная функция, которая вернула структуру по значению. Структура подходит под правила, и поэтому компилятор вернул ее не через скрытый указатель.
Так а чего мне этот компилятор, какие-то там структуры его... Я просто скачаю готовый бинарник, ревёрсну смещения, и в ассемблере буду вызывать. Ещё и пропатчу и хуки поставлю, которые будут значение возвращать так, как мне надо. Вот так пропишу ему mov/mov, чтобы в память мне возвращал нормально, а не какие-то там скрытые указатели.
Обсуждают сегодня