Page 1 sur 1

Question pour Fred - x64

Publié : jeu. 03/mars/2016 14:57
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

Re: Question pour Fred - x64

Publié : jeu. 03/mars/2016 18:43
par Fred
C'est pour garder la pile alignée sur 16 bytes.

Re: Question pour Fred - x64

Publié : jeu. 03/mars/2016 19:01
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.

Re: Question pour Fred - x64

Publié : jeu. 03/mars/2016 19:49
par Fred
Oui c'est ca

Re: Question pour Fred - x64

Publié : ven. 04/mars/2016 7:09
par Anonyme2
Merci Fred.