Size: a a a

Ассемблер

2020 September 30

RS

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

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Rusty Shackleford
Подскажите пожалуйста, для того, что бы сохранить регистры неимезнными в соответствии с calling convention, я делаю вот так:
        push   RBP
       push   RBX
       push   RDI
       push   RSI
       push   R12
       push   R13
       push   R14
       push   R15
       mov    RBP, RSP
       sub    RSP, 8   ;align saved registers
       ;--- /пролог
...some code...
       ;--- эпилог
       mov    RSP, RBP
       pop    R15
       pop    R14
       pop    R13
       pop    R12
       pop    RSI
       pop    RDI
       pop    RBX
       pop    RBP
       ret

и я так понимаю, что так делать нельзя, потому что теперь некоторые winapi затирают ret адрес в моих функциях
так делать нельзя ? ) я знаю, что в линуксе например есть красная зона за указателем стека процедуры которая сохраняется неизменной и не трогается системой, смею предположить, что написав эпилог таким образом я вышел за рамки этой красной зоны или что-то в этом роде в винде, что скажите ?
погодь, так ты регистры сохраняешь как параметры с rbp+, а надо сохранять как локальные переменные с rbp-
источник

RS

Rusty Shackleford in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮bot
погодь, так ты регистры сохраняешь как параметры с rbp+, а надо сохранять как локальные переменные с rbp-
елки палки ))
источник

RS

Rusty Shackleford in Ассемблер
что-то я запутался, но ты прав похоже ))
источник

RS

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

RS

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

RS

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

A

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

RS

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

RS

Rusty Shackleford in Ассемблер
чем дальше тем больше понимаю на собственных ошибках почему долнжо быть так а не иначе, и тем тяжелее становиться соблюдать всё не используя макросы и делая вручную всё =)
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
на фасме пишешь?
источник

RS

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

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
а секцию импорта тоже руками делаешь?
источник

RS

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

RS

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

RS

Rusty Shackleford in Ассемблер
запутанно, как-то так ))
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
а почему проект без макросов (стандартных)?
источник
2020 October 01

RS

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

RS

Rusty Shackleford in Ассемблер
если макросы использовать, скрытыми остаются много нюансов
источник

RS

Rusty Shackleford in Ассемблер
я так и на Си могу писать, если на то уж пошло ))
асм он как раз для того и есть, что бы контроль был полный всех мелочей
источник