Ok, je vais essayer de pas faire trop d'erreurs, je vais repondre vite fait de memoire
Alors premier point, un exe != dll
On peut dire vite fait qu'un exe c le code des fonctions + les donnees statiques + des points d'entrees (ajoutes par le compilo) + un header pour l'OS.
Une DLL c grosso-modo le code des fonctions + les donnees statiques + un point d'entree mais totalement different (pas executable justement).
Bon, la facon dont est charge un programme depends de l'os, mais grosso modo ca donne ca:
- decodage de l'entete de l'exe.
- chargement de l'image du code en memoire.
- chargement des data statiques en memoire.
- chargement des symbols externe (relocation).
- debut d'execution du code.
Bon, c'est pas forcement l'ordre et c super simplifie, mais c l'idee!
La partie interressante c'est justement le chargement des symbols externes (fonctions ou donnees). Ca veut dire que dans le code de l'exe on a une liste de fonctions qui ne sont pas presentes dans le binaire et qu'il faut aller chercher ailleur. C'est justement dans les dll qu'on vas trouver ces fonctions. Pour s'y retrouver dans les fonctions, ca depends de comment ca a ete compile, mais grosso modo les fonctions exportes par les dll sont repertories par le systeme.
Donc quand le systeme trouve une fonction a importer dans un exe, il vas fouiller les dll pour la charger en memoire (dans une zone differente du process du prog).
Bon, c peut etre pas super clair, mais je pourrais preciser plus si tu veux (ou quelqu'un d'autre pourra me corriger
Enfin, apres au niveau des fonctions pour les parametres et tout ca en asssembleur, c la jungle! ca depends vachement de l'archi en fait!
Mais grosso-modo sur x86, dans ton code (asm donc) une frame est creer pour executer la fonction (on fait un decallage dans le code pour pointer sur le code de la fonction je crois). Ensuite, les arguments de la fonction sont empiles au debut de la frame (en fin sur d'autres archis); l'ordre des arguments et leur nombre depends des compilos/archis/os. Lorsque dans ton code tu fait reference a un parametre, il vas le chercher la ou il l'a empile. Ensuite le retour de la fonction est stocke dans un registre qui sera reccupere dans la fonction appelante (depends aussi de pleins de trucs).
Bref, c pas clair et c'est normal c super different selon les archis!
Pour plus de precisions, faudrait se concentrer sur une plateforme en particulier.
Bon, j'espere ne pas avoir trop embrouille les choses!
a+