PureBasic

Forums PureBasic
Nous sommes le Lun 17/Juin/2019 22:29

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 
Auteur Message
 Sujet du message: Question pour Fred - x64
MessagePosté: Jeu 03/Mar/2016 14:57 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3521
Localisation: Sourans
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:
  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:
; 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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Question pour Fred - x64
MessagePosté: Jeu 03/Mar/2016 18:43 
Hors ligne
Site Admin

Inscription: Mer 21/Jan/2004 11:03
Messages: 2565
C'est pour garder la pile alignée sur 16 bytes.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Question pour Fred - x64
MessagePosté: Jeu 03/Mar/2016 19:01 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3521
Localisation: Sourans
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:
; 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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Question pour Fred - x64
MessagePosté: Jeu 03/Mar/2016 19:49 
Hors ligne
Site Admin

Inscription: Mer 21/Jan/2004 11:03
Messages: 2565
Oui c'est ca


Haut
 Profil  
Répondre en citant le message  
 Sujet du message: Re: Question pour Fred - x64
MessagePosté: Ven 04/Mar/2016 7:09 
Hors ligne
Avatar de l’utilisateur

Inscription: Jeu 22/Jan/2004 14:31
Messages: 3521
Localisation: Sourans
Merci Fred.


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 5 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye