litrovith Я сейчас весьма не трезв, попробую разобраться в выражении завтра. А чем лучше юзазть фасм для проганья IA64 я не понял. Разве чтобы ошибок побольше набрать.
KeSqueer >cl.exe подходит только для сборки под x86 Там разные есть cl.exe же. >IA64 Это Итаник. Не x64. Mika0x65 Ты кладёшь arg4 на то место, которое вызываемая функция использует в качестве когтеточки. Т.е. она не будет искать там аргумент, но может использовать это место по своему усмотрению (для хранения нелетучего регистра, например). С другой стороны, в том месте, где вызываемая функция будет ожидать arg4, у тебя лежит стечный мусор. В то же время, никто не может запретить тебе использовать кастомные CC для вызова своих функций, хотя и существует несколько причин, по которым этого стоит избегать (основная – это, вероятно, поддержка раскрутки). Конкретно для этого случая весьма подходит этот пост by Scott Noone. И, кроме официальной документации, один может почитать об x64 ABI в блоге у FreiK'а, или здесь у Skywing'а.
Вот mingw64 реально надо отдельно качать. Причём в gcc я знаю bulean нету =) Наверное таких вообще нету первопроходцев кто msdn на сторонних кампилерах собирает, но было бы полезно.
Sol_Ksacap Поздновато, конечно, но все же интересно: что я сделал не так? Прочитал статью, все верно, кроме утверждения, что 32 байта отводятся для сохранения rcx, rdx, r8 & r9 -- ф-ия может использовать эти ячейки по своему усмотрению.
Код (Text): mov rcx, arg0 mov rdx, arg1 mov r8, arg2 mov r9, arg3 push arg4 sub rsp, 0x20 call func Упс. У тебя всё верно же. А вот мы почему-то смотрели на это не с той стороны – как если бы "push arg4" и "sub rsp, 20" были поменяны местами. Прими наши извинения. И спасибо за фикс.