Question pour Fred - x64

Pour discuter de l'assembleur
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Question pour Fred - x64

Message par Anonyme2 »

Fred,

j'ai commencé la programmation en asm 32/64 d'une librairie perso.
Pour l'instant ça marche.

Ma question est sur le ShadowSpace de 32 bit, j'ai lu plusieurs articles et j'ai saisi.

Pourquoi utilises-tu en particulier SUB RSP, 8 avant l'appel de GadgetID en particulier (mais pas que) puis SUB RSP, 32 ?
Cela revient à SUB RSP, 40, c'est cette valeur que j'utilise avec mon générateur de squelette asm à défaut de savoir pourquoi.

Tes fonctions utilisent-elles 8 octets prédéclarés en plus du ShadowSpace ?
Je ne crois pas car on peut réserver de la place sur la pile dans le codage de la fonction.

C'est une sécurité pour éviter l'overwrite ?

on retrouve ce 40 par exemple à l'initialisation des variables globales

Code : Tout sélectionner

  SUB    rsp,40
  MOV    r8,I_BSSEnd-I_BSSStart
  XOR    rdx,rdx
  MOV    rcx,I_BSSStart
  CALL   memset
qui sert aussi aux appels d'après :
CALL GetModuleHandleA
CALL HeapCreate
etc.

et Gadgetid dans le cadre d'un sendmessage

Code : Tout sélectionner

; SendMessage_(GadgetID(#ListIcon), #LVM_SETITEMSTATE, 3, @var)
  MOV    rax,qword v_var
  PUSH   rax
  PUSH   qword 3
  PUSH   qword 4139
  SUB    rsp,8
  MOV    rcx,qword 0
  SUB    rsp,32
  CALL   PB_GadgetID
  ADD    rsp,40
  MOV    rcx,rax
  POP    rdx
  POP    r8
  POP    r9
  CALL   SendMessageA
Merci
Fred
Site Admin
Messages : 2648
Inscription : mer. 21/janv./2004 11:03

Re: Question pour Fred - x64

Message par Fred »

C'est pour garder la pile alignée sur 16 bytes.
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Question pour Fred - x64

Message par Anonyme2 »

Merci.

Dis-moi si je comprend bien pour l'exemple suivant tiré d'un fichier PB:
le SUB RSP suis 3 PUSH 64 bits, cest pour cela que tu empiles ensuite un qword.

Code : Tout sélectionner

; SendMessage_(GadgetID(#ListIcon), #LVM_SETITEMSTATE, 3, @var)
  MOV    rax,qword v_var
  PUSH   rax
  PUSH   qword 3
  PUSH   qword 4139
  SUB    rsp,8
  MOV    rcx,qword 0
  SUB    rsp,32
  CALL   PB_GadgetID
  ADD    rsp,40
  MOV    rcx,rax
  POP    rdx
  POP    r8
  POP    r9
  CALL   SendMessageA
je me souviens avoir vu une macro ici sur ce forum pour aligner la pile, je vais rechercher.
Fred
Site Admin
Messages : 2648
Inscription : mer. 21/janv./2004 11:03

Re: Question pour Fred - x64

Message par Fred »

Oui c'est ca
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Re: Question pour Fred - x64

Message par Anonyme2 »

Merci Fred.
Répondre