Size: a a a

Ассемблер

2020 July 29

RS

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

RG

R G in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
теневая область выделялась 1 раз в начале листинга для всех функций, для использования функций с большим чем 4 параметрами, перед вызовом CreaterWindowEx выделили недостающее метсто для 5-12 параметров, а это составляет 8*8
я вижу, но просто не понимаю, что будет в rsp, rsp+8, rsp+8*2 и тд для вызываемой функции? Или вызываемая функция будет брать стековые аргументы начиная с rsp+8*4 ?
источник

RS

Rusty Shackleford in Ассемблер
R G
я вижу, но просто не понимаю, что будет в rsp, rsp+8, rsp+8*2 и тд для вызываемой функции? Или вызываемая функция будет брать стековые аргументы начиная с rsp+8*4 ?
да стековые аргументы получается с rsp+8*4, я вот просто сам не пойму есть ли разница где резервировть место для теневой копии регистров сразу за указателем вершины или пофиг
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
R G
я вижу, но просто не понимаю, что будет в rsp, rsp+8, rsp+8*2 и тд для вызываемой функции? Или вызываемая функция будет брать стековые аргументы начиная с rsp+8*4 ?
rsp+8*4 с этого адреса будет брать 5й параметр. если ей надо будет 1-4 то она использует регистры, или скопировав их в теневую область (а это промежуток между rsp+8*0 и rsp+8*3) - будет брать от туда
источник

RS

Rusty Shackleford in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
rsp+8*4 с этого адреса будет брать 5й параметр. если ей надо будет 1-4 то она использует регистры, или скопировав их в теневую область (а это промежуток между rsp+8*0 и rsp+8*3) - будет брать от туда
а если юзать инвок, то будет сначало sub rsp,20h и потом уже push'ы параметров стековых
источник

RS

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

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Rusty Shackleford
а если юзать инвок, то будет сначало sub rsp,20h и потом уже push'ы параметров стековых
invoka нет х64. если использовать сисетмные функции через инвоке то програ не будет работать. но для своих (пользовательских функций) можешь организовать этот способ соглашения вызова процедур.
источник

RG

R G in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
rsp+8*4 с этого адреса будет брать 5й параметр. если ей надо будет 1-4 то она использует регистры, или скопировав их в теневую область (а это промежуток между rsp+8*0 и rsp+8*3) - будет брать от туда
Окей, тогда понял. А собственно теневая область где будет находиться? Кстати если она на дне стека, то ведь в нее еще залезают зачем-то, записывая по rsp+8*9, rsp+8*10 и rsp+8*11
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
R G
Окей, тогда понял. А собственно теневая область где будет находиться? Кстати если она на дне стека, то ведь в нее еще залезают зачем-то, записывая по rsp+8*9, rsp+8*10 и rsp+8*11
10й 11й 12й параметры CreaterWindowEx
источник

RS

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

RS

Rusty Shackleford in Ассемблер
у Аблязова даже в примерах инвок, и в отличие от x32 он как раз еще резервирует место для теневой области
источник

RS

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

A

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

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Rusty Shackleford
у Аблязова даже в примерах инвок, и в отличие от x32 он как раз еще резервирует место для теневой области
ответь себе что такое invoke?
источник

RS

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

RS

Rusty Shackleford in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
ответь себе что такое invoke?
макрос фасма
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
Rusty Shackleford
макрос фасма
в который можно вписать логику fastcall
источник

RG

R G in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
10й 11й 12й параметры CreaterWindowEx
ну так, получается в коде аблязова их (10й, 11й, и 12й арг) записывают в теневую область зачем-то, если учесть что она внизу. Если все же теневая все таки на верхушке стека, то вроде все сходится..
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in Ассемблер
в х32 там вписан stdcall
источник

RS

Rusty Shackleford in Ассемблер
Aiwan ╭∩╮ (òÓ,) ╭∩╮
в х32 там вписан stdcall
да, а в win64a.inc свой инвок
источник