Size: a a a

Ассемблер

2020 July 29

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Alex Naraito
Так какие-то примеры есть и для 32 и для 64, как я понял
да
источник

AN

Alex Naraito in Ассемблер
Всё примеры есть, они работают, так что разберусь, спасибо большое (хотя их что-то маловато, есть ли какой-нибудь архив с примерами? Или что-то подобное?)
источник

RS

Rusty Shackleford in Ассемблер
R G
в начале sub rsp, 0x28 это и есть выравнивание. 0x28 это 40 байт из которых 32 на т.н теневую часть, а 8 чтобы выровнять на границу 16
перед вызовами винапи тоже выравнивать нужно или достаточно место зарезервитьва для теневых копий ? sub rsp,20h или 28h ?
источник

RS

Rusty Shackleford in Ассемблер
в разной литературе по разному видел
источник

RS

Rusty Shackleford in Ассемблер
инвок фасма вроде бы 20h только резервирует, каждый раз
источник

RS

Rusty Shackleford in Ассемблер
Разработчики 64-разрядных операционных систем Windows стандартизировали вызов функций в Win64; теперь
все функции, которые предоставляет ОС, можно вызывать только по соглашению
fastcall

Вопрос закрыт )
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Alex Naraito
Всё примеры есть, они работают, так что разберусь, спасибо большое (хотя их что-то маловато, есть ли какой-нибудь архив с примерами? Или что-то подобное?)
из примеров могу предложить сами исходники фасма и его инструментов, так же на офф сайте есть что из примеров для линуха, и ещё форум
источник

AN

Alex Naraito in Ассемблер
Окей, буду смотреть когда-нибудь
источник

RG

R G in Ассемблер
Rusty Shackleford
перед вызовами винапи тоже выравнивать нужно или достаточно место зарезервитьва для теневых копий ? sub rsp,20h или 28h ?
перед вызовом любой функции rsp должен быть кратным 16 байтам, это согласно windows x 64 abi
источник

RG

R G in Ассемблер
резервировать нужно столько, сколько аргументов, но не меньше 4ех
источник

RS

Rusty Shackleford in Ассемблер
ясно
источник

RS

Rusty Shackleford in Ассемблер
R G
резервировать нужно столько, сколько аргументов, но не меньше 4ех
а зачем резервировать стек больше 4х, если все аргументы после 4х и так в стеке передаются а резервирование собственно и ставит задачу, сохранить первые 4 аргумента передаваемые через регистры в стек, в случае необходимости их использование при вызове ф-ии внутри ф-ии
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Alex Naraito
Окей, буду смотреть когда-нибудь
на ютубе ещё что то есть для линуха
источник

RG

R G in Ассемблер
Rusty Shackleford
а зачем резервировать стек больше 4х, если все аргументы после 4х и так в стеке передаются а резервирование собственно и ставит задачу, сохранить первые 4 аргумента передаваемые через регистры в стек, в случае необходимости их использование при вызове ф-ии внутри ф-ии
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Rusty Shackleford
а зачем резервировать стек больше 4х, если все аргументы после 4х и так в стеке передаются а резервирование собственно и ставит задачу, сохранить первые 4 аргумента передаваемые через регистры в стек, в случае необходимости их использование при вызове ф-ии внутри ф-ии
в случае передачи 1-4 аргументов они передаются в регтстры, в самой процедуре эти регистры (в которых хранятся параметры) могут использоваться для каких то целей(требование самих инструкций например). для этого и резервирубт (на всякий случай) это место для параметров. если знаешь что параметр в работе функции ты будешь использовать 1 раз и в начале, то можешь не сохранять параметр в теневую часть. если на протяжении всей функции у тя обращение к параметрам происходит не по 1 разу, то лучше сохранять и не занимать регистры параметрамт
источник

RS

Rusty Shackleford in Ассемблер
Забавно, тоже как раз Аблязова читаю по этому поводу, только на 243 странице )
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Rusty Shackleford
а зачем резервировать стек больше 4х, если все аргументы после 4х и так в стеке передаются а резервирование собственно и ставит задачу, сохранить первые 4 аргумента передаваемые через регистры в стек, в случае необходимости их использование при вызове ф-ии внутри ф-ии
понял твой вопрос с многочисленными речевыми оборотами.

резервирование места под параметры в стеке не есть копирование(перенос) параметров в стек
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
если параметров 5, то 5й должен передаваться через стек, для первых 4х - только резервирование, а при необходимости уже в самой функции - то и копирование в стек
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
нет(ты почему-то удалил свое сообщение, не делай так)
источник

RS

Rusty Shackleford in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
нет(ты почему-то удалил свое сообщение, не делай так)
потому, что понял что не правильно рассуждаю
источник