Accueil > Forum > > > > Appel DLL
Appel DLL
jeudi 10 mai 2007 à 00:09:34 |
Appel DLL

Arnaud16022
|
Bonjour J'ai quelques soucis pour appeler des fonctions de l'API win32 ( ou n'importe quelle DLL, à vrai dire) Google me fait défaut sur le coup, et asmfr itou ; quelqu'un aurait-il un petit tuto sur le sujet ? ou quelques conseils ? Nota Bene : Il se trouve que je veux réduire au maximum, mais réellement maximum, la taille de mon .com ( pas exe pour ne pas avoir la taille du header PE en plus ), et donc, écrire moi-même, dans le segment .text , le nom des fonctions à importer, ainsi que le nom des dlls . Rien d'automatique si possible . Merci de votre aide : ) Arnaud _______________________ Omnia vincit labor improbus
|
|
jeudi 10 mai 2007 à 08:43:45 |
Re : Appel DLL

Nasman
|
Bonjour Arnaud16022,
Je crois que tu auras de grosses difficultés pour utiliser les API win32 avec un fichier.com pour plusieurs raisons:
- la première c'est que pour appeler une API win32 il faut connaitre son adresse dans l'espace de mémoire virtuel. Cette adresse est exprimée sous la forme d'une adresse 32 bits, par exemple MessageBoxA correspond à l'adresse 77E03D81 (windows 2000). Il te faut connaitre l'adresse de l'API pour son appel.
Pour la connaitre il te faut utiliser une table d'importation qui te donne la correspondance entre la chaine de caractère (nom de la fonction) et l'adresse qui ne sera connue qu'au chargement du programme.
Malheureusement les tables d'importation ne sont pas disponibles avec le format .com - tu te trouves ainsi dans une impasse.
Autre chose: sauf erreur de ma part le fonctionnement des appels est différent entre le mode réel et le mode protégé. En mode réel tu précise le segment CS(16 bits) et l'offset IP(16 bits) lesquels se chevauchent pour former une adresse finale de 20 bits. (pour un .com CS=DS=ES=SS) ; en mode virtuel CS exprime des droits d'accès et l'offset EIP (32 bits) correspond à une adresse virtuelle de mémoire.
Je pense que le plus simple pour toi est de faire un programme exe 32 bits. Quelles sont les contraintes qui t'imposent de faire un fichier .com et quelles sont les fonctions win32 que tu souhaites utiliser. Peut-être que des fonctions Bios ou DOS suffiraient ?
A+
|
|
jeudi 10 mai 2007 à 11:37:20 |
Re : Appel DLL

ToutEnMasm
|
Salut, Les appels API sont en 32 bits,avec un fichier .com fonctionnant au maximum en 46 bits,rien ne marche c'est normal. ToutEnMasm
|
|
jeudi 10 mai 2007 à 12:50:01 |
Re : Appel DLL

Arnaud16022
|
hum. *relit 3 fois les réponses* Déjà, c'est _possible_ , je l'ai vu ; par contre, de là à le faire, c'est une autre histoire ^^ ToutEnMasm -> peut-être voulais tu dire 16 bits ? : ) OK pour les tables d'importation . Sauf que justement, moi ce que je veux écrire c'est un truc comme ça ( de tête ): db "MessageBoxA",0 db .. le nom de toutes mes autres fonctions times 5 db 0 db "user32.dll",0 db "openGL32.dll",0 ( très approximativement ) . Pour la seconde partie de ta réponse : le .com est en mode virtuel ? je ne savais même pas tiens :s gné. Mais le bios ne suffit pas, non. Pour les contraintes : tentative de démo 4k :p _______________________ Omnia vincit labor improbus
|
|
jeudi 10 mai 2007 à 13:52:03 |
Re : Appel DLL

Nasman
|
Rebonjour,
Si tu désires mettre le nom de tes fonctions dans les data et les appeler par la suite, tu peux le faire mais tu dois utiliser un format PE.
Tu pourras utiliser les fonctions LoadLibraryA avec le nom de la dll comme paramètre puis GetProcAddressA avec le nom de la fonction et le "handle" renvoyé par LoadLibrary. Cependant les fonctions LoadLibrary et GetProcAddress doivent elles même être importées pour fonctionner. Ton problème pourra, dans le meilleur des cas se limiter à l'importation de deux fonctions de kernel32.dll mais ce ne pourra être fait que si tu utilises le format PE. Exemple de programme donnant l'adresse de la fonction (Nasm)
extern LoadLibraryA ;définition des fonctions externes import LoadLibraryA kernel32.dll ;importation de l'adresse de la fonction extern GetProcAddress ;idem import GetProcAddress kernel32.dll
segment code public use32 class=CODE ..start: Push dword Librairie Call [LoadLibraryA] ;handle du module de user32 (eax) Push dword Fonction Push eax Call [GetProcAddress] ;adresse de MessageBoxA (eax) push dword 0 push dword Titre push dword Message push dword 0 call eax ;appel de la fonction MessageBoxA ret segment data public use32 class=DATA Titre db "Nom de la boite",0 Message db "Coucou",0 Librairie db "user32.dll",0 Fonction db "MessageBoxA",0
L'exécutable correspondant fait 2580 octets (pour 40 octets de code) en raison des alignements de section et du PE header
Regarde si tu peut partir sur cette voie A+
|
|
jeudi 10 mai 2007 à 17:36:34 |
Re : Appel DLL

ToutEnMasm
|
Salut, Les fichiers com fonctionnent en 32 bits,un module masm32 spécial permet de faire cela.
Le seul ennui c'est que windows ouvre une fenêtre dos et la au-revoir les appels API ou alors la série est très limité et il faut se référer a MSDN pour chaque API.
En gros c'est beaucoup de docs a compulser pour pas grand chose.Bon courage.
[ Lien ]
|
|
vendredi 11 mai 2007 à 23:19:12 |
Re : Appel DLL

patatalo
|
salut, tu peux effectivement te passer de l'IAT (cf source windows debugger sans debugger ) qui permet de trouver la kernel32 ainsi que la fonction souhaitée ( c'est une emulation simplifiée des fonctions du peloader ). Par contre, le passage du .com au mode 32 bits, là, je vois pas !!! peut-etre en DPMI ? ou alors en bidouillant le thread ? masm32 -> le lien http://support.microsoft.com/kb/238245/fr parle de ShellExecute() ou WinExec() mais un .com tu double clic dessus et il s'execute, il n'y a pas besoin d'un programme tiers pour demarrer un fichier .com. le plus simple serait peut etre de faire un exe win32 avec un peloader rétréci a mort !!! (cf Danny Boom). Il doit y avoir des options de link pour ça... @++
|
|
samedi 12 mai 2007 à 08:16:20 |
Re : Appel DLL

ghuysmans99
|
non, un fichier *.com s'éxécute avec ntvdm.exe car il est émulé ... imaginez qu'il s'éxécute tout seul : il peut tripoter partout dans la mémoire et sur le dd ... gênant ??
|
|
lundi 14 mai 2007 à 17:25:57 |
Re : Appel DLL
|
jeudi 24 mai 2007 à 11:47:27 |
Re : Appel DLL

Arnaud16022
|
Bonjour les gens Tout d'abord, désolé pour le délai de réponse, les partiels approchent dangereusement. Merci pour vos remarques, je ne savais pas que le .com était exécuté en mode virtuel 32 bits. J'avais déjà tenté de bidouiller le header PE d'un bon vieux .exe pour en avoir un petit mais flemme de farfouiller trop en profondeur dans les specs -> pas réussi. Je viens de trouver ce site: http://www.phreedom.org/solar/code/tinype/ où le gars explique comment créer un .exe de 97 bits qui retourne 42... très , très, mais vraiment très impressionnant, superbe démarche, explications nickel. Seul pb : le code ENTIER ne peut tenir que sur ... un dword :D ( dans le champ "date de création" du header PE, fallait y penser quand même ) Merci de vos réponse une fois de plus, je vais aller voir de ce côté. ++ ! Arnaud _______________________ Omnia vincit labor improbus
|
|
Cette discussion est classée dans : taille, appel, dll, fonctions, maximum
Répondre à ce message
Sujets en rapport avec ce message
[MASM32] DLL export en C [ par frobinet ]
Bonjour, Pour créer un PlugIn, il faut que je transforme une dll en appel de convention stdcall vers un appel de convention en C. j'ai remplacer pa
Comment compiler un kernel en C et en asm [ par vinc1008881 ]
Bonjour tous le monde Voilà mon problème : Je voudrait faire un petit kernel en C qui contient admettons 2 fonctions- cls- printfCes fonctions, je les
Création d'une dll sous Win [ par JoTheDoor ]
Bonjour,Malgré tout les indications de Winamp, je me suis entêté à créer un plugin avec RadAsm. Tout fonctionne très bien sous Win 95/98. Mais sous
dll windows [ par tequilasurlaterre ]
bonjour a tous Est il possible de modifier ou de le changer, le fichier index du dossier cookies de windows,sans que windows ne le repare. je veux a
Problème avec un code [ par showbiz_hurricanes ]
Bonjour Pour un projet universitaire, je dois concevoir un programme de tri en assembleur mais celui ci ne fonctionne pas comme je le voudrai. Le
debugeueueur en masm32 [ par papiboff ]
BJ vous avez dit blizzard comme c'est bizarre j'ai fait un debugeueueur pour ma dll avec MessageBox ; oui oui et mon debug me dit que la dll travaill
Exploiter une dll c++ avec l'ASM [ par frobinet ]
Bonjour,Je souhaite utiliser une dll écrite sous forme de class à partir du C++ dans mon programme ASM:Exemple :class DLL_EXPORT NomDeClass { pu
DECOMPRESSER UNE ARCHIVE RAR AVEC UNRAR.DLL [ par tomart2005 ]
Bonjour,J'ai des difficulté à coder une PROC qui utilise la dll unrar.dll étant donné le manque de doc trouvé, si quelqu'un a déjà réaliser un prochai
Comment utiliser une DLL asm en C++ [ par Neo_Fr ]
Salut tt le monde,Je suis tres intereser par le dll suivante: http://www.asmfr.com/code.aspx?ID=23840J'ai besoin de deux fonctions qui sont inclu dans
DLL et Code Segment [ par Taron31 ]
Bonjour, j'ai une question peut-être un peu étrange : en effet, je voudrais savoir si tout le code d'une DLL (par exemple NtDll.dll) est situé dans un
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|