Assembleur #10 - fonctions (1/2)

  Рет қаралды 2,646

FormationVideo

FormationVideo

Күн бұрын

Пікірлер: 26
@nathslw3504
@nathslw3504 4 күн бұрын
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 :)
@ayrton9808
@ayrton9808 9 ай бұрын
Ç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-vip8978
@ilies-vip8978 9 ай бұрын
Merci pour le poulet ! On en apprend tellement, je suis trop content
@formation-video
@formation-video 9 ай бұрын
Bonne continuation
@vinyard13
@vinyard13 8 ай бұрын
@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-video
@formation-video 8 ай бұрын
Oui, mais j'ai habitué les gens à utiliser GoLink sur Windows pour varier les différents outils 👍
@vinyard13
@vinyard13 8 ай бұрын
@@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 :(
@vinyard13
@vinyard13 8 ай бұрын
@formation-video Up please
@formation-video
@formation-video 8 ай бұрын
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.
@blatip
@blatip 9 ай бұрын
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-video
@formation-video 9 ай бұрын
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-video
@formation-video 9 ай бұрын
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é 👍
@blatip
@blatip 9 ай бұрын
​@@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-video
@formation-video 9 ай бұрын
Tu auras donc bien fait de laisser un commentaire, bonne continuation (la seconde partie arrive samedi)
@baguiresome9246
@baguiresome9246 9 ай бұрын
Bonjour a vous et merci je vous et un peu un peu je me lance dans la programmation informatique
@formation-video
@formation-video 9 ай бұрын
Bon courage 👍
@dev-05
@dev-05 8 ай бұрын
Mais ducoup, ret ne depile pas rsp pour le mettre dans rip, mais rbp + 8 qui contient l'adresse de retour nan ?
@formation-video
@formation-video 8 ай бұрын
À quel moment de la vidéo exactement fais-tu référence ?
@dev-05
@dev-05 8 ай бұрын
@@formation-video quand tu expliques ce que fait call et ret en commentaire, c'était vers la première partie de la video
@formation-video
@formation-video 8 ай бұрын
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-05
@dev-05 8 ай бұрын
@@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-video
@formation-video 8 ай бұрын
Voilà
@jcroiscestbon986
@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
@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👍
@vinyard13
@vinyard13 9 ай бұрын
ah, finally !
@formation-video
@formation-video 9 ай бұрын
👍
Assembleur #11 - fonctions (2/2)
41:45
FormationVidéo
Рет қаралды 1 М.
ВЛОГ ДИАНА В ТУРЦИИ
1:31:22
Lady Diana VLOG
Рет қаралды 1,2 МЛН
Retro MS-DOS Coding - Recreating the Iconic Award BIOS Screen
18:16
NCOT Technology
Рет қаралды 74 М.
Ce truc ? La plus grande prouesse informatique
15:11
overfl0w
Рет қаралды 145 М.
EB_#359 Introduction - Le Langage Informatique Assembleur
27:08
Électro-Bidouilleur
Рет қаралды 43 М.
screw it... let's recode Windows from scratch
23:41
V2F
Рет қаралды 706 М.
7 Outside The Box Puzzles
12:16
MindYourDecisions
Рет қаралды 23 М.
Assembleur #1 - introduction
31:23
FormationVidéo
Рет қаралды 147 М.
Programmation orientée-objet
35:36
FormationVidéo
Рет қаралды 51 М.