Salut, j'ai une question à partir de ce moment dans la vidéo où on ajoute une variable locale "truc" dans la fonction add_numbers() : @55:55 Dans le prologue, on ajoute cette ligne pour ajouter un espace mémoire pour la variable locale "truc" : sub rsp, 8 A la fin, on a donc ce code : ; Prologue mov [rsp+8], rcx mov [rsp+16], rdx sub rsp, 8 ; corps de la fonction mov rax, [rsp+8] add rax, [rsp+16] Mais comme on a modifié RSP (qui pointe maintenant sur la variable locale "truc"), alors rcx et rdx ne devrait plus être à l'adresse [rsp+8] et [rsp+16] respectivement. Mais plutot, rcx et rdx devrait être à l'adresse [rsp+16] et [rsp+24] . Ainsi, je me demande si dans le corps de la fonction, ce ne serait pas plutôt ce code ci, comme on a modifié RSP ? ; corps de la fonction mov rax, [rsp+16] add rax, [rsp+24] Merci beaucoup :)
@ayrton98089 ай бұрын
Ça faisait un moment que j'avais regardé une de tes vidéos récentes et je dois dire que la musique au début m'a fais un peu bizzare
@ilies-vip89789 ай бұрын
Merci pour le poulet ! On en apprend tellement, je suis trop content
@formation-video9 ай бұрын
Bonne continuation
@vinyard138 ай бұрын
@29:48 Au fait, tu sais que si tu veux utiliser le lieur ld avec l'IPA Windows, il suffit de mettre le chemin complet de Kernel32 : ld C:\Windows\System32\kernel32.dll main.o -o debug.exe
@formation-video8 ай бұрын
Oui, mais j'ai habitué les gens à utiliser GoLink sur Windows pour varier les différents outils 👍
@vinyard138 ай бұрын
@@formation-video Oui mais tous les executables créés par GoLink me génèrent des alertes de sécurité de Microsoft Defender. Tu n'as jamais eu ce problème ? Je n'arrive pas à éviter cela et du coup Windows met en quarantaine les .exe créés par Golink :(
@vinyard138 ай бұрын
@formation-video Up please
@formation-video8 ай бұрын
Non, tu vois bien dans les vidéos que je n'ai pas ce souci. De toute manière, tu peux utiliser le lieur que tu veux, ça ne posera aucun problème.
@blatip9 ай бұрын
Définitivement, il y a quelque chose que je ne comprends pas avec la réservation de 32+8 octets (minute 26 de la video) : le problème de décalage de pile de 8 octets ne vient pas du fait qu'on veut réserver 32 octets, mais du fait que le call équivaut à un push de 8 octets (donc n'aligne pas la pile sur 16 octets). C'est donc le call qui crée le décalage de 8 octets. Ca veut donc dire qu'il faudrait TOUJOURS rattraper le décalage de 8 octets avant de faire un nouveau call. Or ce n'est pas le cas. Dit autrement : pourquoi faudrait-il recaler la pile quand on veut réserver 32 octets, et pas quand on ne veut rien réserver ?
@formation-video9 ай бұрын
L'appel à main (ou _start sur GNU/Linux) pousse l'adresse de retour sur la pile (8 octets). Conséquence, il faut l'aligner sur 16 octets (comme le veulent les conventions Windows x64 ou SystemV AMD64), avec par exemple un sub rsp, 8. On a alors poussé au total 16 octets sur la pile, qui est bien alignée. Vient s'ajouter à cela, pour la convention Windows x64, le fait de devoir réserver 32 octets d'espace pour les 4 arguments. Mais en ajoutant 32 octets aux 16 octets de départ, on arrive à 48, et la pile reste alignée. En conclusion, on va généralement retrouver une soustraction à RSP de 8 octets SystemV AMD64 (pour corriger l'alignement) et une soustraction à RSP de 40 sur Windows x64 (pour corriger l'alignement + réserver l'espace d'ombre). "pourquoi faudrait-il recaler la pile quand on veut réserver 32 octets, et pas quand on ne veut rien réserver ?" Non, il n'y a pas de choix à faire : la pile doit TOUJOURS être alignée sur 16 octets AVANT tout appel à une fonction.
@formation-video9 ай бұрын
Tu peux donc pousser les valeurs que tu veux sur la pile, il faudra toujours veiller ensuite qu'elle soit bien alignée sur 16 octets avant l'appel à une fonction, puisque la convention d'appel garantit à la fonction appelée que cet alignement est bien respecté 👍
@blatip9 ай бұрын
@@formation-video Enfin compris ! Je ne comprenais pas que le sub rsp, 8 sert à "compléter" la pile suite à l'appel juste AVANT. Merci ! Et merci pour ces excellents cours vidéo (qui me permettent de me remettre à niveau depuis l'assembleur ... Z80 et 68000 - oui je suis pas tout jeune ^^)
@formation-video9 ай бұрын
Tu auras donc bien fait de laisser un commentaire, bonne continuation (la seconde partie arrive samedi)
@baguiresome92469 ай бұрын
Bonjour a vous et merci je vous et un peu un peu je me lance dans la programmation informatique
@formation-video9 ай бұрын
Bon courage 👍
@dev-058 ай бұрын
Mais ducoup, ret ne depile pas rsp pour le mettre dans rip, mais rbp + 8 qui contient l'adresse de retour nan ?
@formation-video8 ай бұрын
À quel moment de la vidéo exactement fais-tu référence ?
@dev-058 ай бұрын
@@formation-video quand tu expliques ce que fait call et ret en commentaire, c'était vers la première partie de la video
@formation-video8 ай бұрын
Une instruction de dépilement (POP) agit forcément sur le registre de pile, donc sur RSP en 64 bits, qui doit à ce moment-là être revenu à l'endroit où se trouve l'adresse de retour, car c'est celle qui permet de revenir à la fonction appelante 👍
@dev-058 ай бұрын
@@formation-video ah enfaite, je me suis trompé, tu as raison, ret depile rsp sur rip. Enfaite j'avais en tête l'image de la stack frame avec le rbp et les variables locals dans la pile. On doit d'abord depiler toute les variables locals puis le rbp et enfin on utilise ret.
@formation-video8 ай бұрын
Voilà
@jcroiscestbon986Ай бұрын
Hey merci pour tes vidéos formations très quali ! Juste je dis ça sans aucune prétention mais ça serait cool que tu restes un peu plus focus sur ce que tu dis sans t'étaler sur d'autre sous-sujets quand tu explique des notions, et surtout quand c'est important. En gros se focus sur l'essentiel sans détour pour garder le fil de l'explication intact. Aussi peut être t'attarder un peu plus sur les aspect plus technique comme LEA car c'est bcp plus complexe que ça en a l'air. De plus selon moi, ça manque de vulgarisation, enfin tu utilise bcp de termes technique qui peuvent nous perdre facilement. Alors c'est très bien dans un second temps pour nous familiariser avec mais il serait intéressant d'utiliser des termes simple et compréhensible de tous pour une première explication avant d'approfondir, et par la suite l'exprimer plus précisément avec des termes techniques :) N'hésite pas à faire des analogies avec des éléments du quotidien pour imager avec des exemples. Petit plus, utiliser plus souvent les termes anglais serait bénéfique car la major partie des doc et des forum d'aide seront en anglais donc, on se retrouverait plus facilement si on l'a déjà entendu dans ton cours. Voila quelques petite remarques que j'ai pu noté avec avoir vu nombres de tes cours, notamment NASM et ARCHI au complet. En gros : faire plus simple et plus direct dans un premier temps, haha. Je sais que dispenser des cours via des vidéo n'est pas forcément évident et qu'il est compliqué d'ajuster les explications sans présence des élèves donc respect ! Je le rappel, je te dis ça sans prétention, j'espère juste que ça t'aidera pour la suite ! Grosse force à toi, et continues !
@formation-videoАй бұрын
Bonjour et merci de ton retour. Je relèverai quelques points à cela : tu estimes que je devrais rester plus focalisé sur la notion de la vidéo sans trop s'étaler sur d'autres sujets, mais par la même aurait apprécié des détails supplémentaires sur LEA, alors que cette instruction n'a justement pas de rapport direct avec le sujet de la vidéo. Cela se contredit à mon sens. Pour la vulgarisation, cela va dépendre beaucoup des vidéos en question et des playlists. J'essaie toujours de partir du principe que l'internaute suit la playlist (ici, un langage de programmation) comme étant le premier qu'il étudie. Après les playlists « Architecture » et « Assembleur » ne sont pas non plus les plus accessibles de la chaîne, cela va de soi. Mais oui, ce n'est pas toujours simple de rester compréhensible pour tous, mais j'y veille, promis ! 😉 Enfin, en dernier point : l'usage de termes en français est totalement voulu et assumé. Le français est ma langue natale et je me suis naturellement engagé à transmettre mes quelques connaissances dans cette langue, même s'il y a des termes qui n'ont pas toujours de traduction directe en français et qu'il est parfois impossible de faire certaines vidéos sans sortir des mots en anglais. C'est d'ailleurs un point qui a été fortement apprécié de beaucoup d'internautes qui l'ont fait savoir dans les commentaires. Après, on aime ou on n'aime pas, mais c'est un point sur lequel je ne changerai pas, même si cela déplaisait. Je te remercie vraiment pour ton retour, passe une très bonne journée👍