Accueil > Forum > > > > LecteurEstDvd asm inline
LecteurEstDvd asm inline
dimanche 15 août 2004 à 11:08:54 |
LecteurEstDvd asm inline

AlexMAN
|
Bonjour, Voila j'ai un ptit pb au nivo, je pense, de l'appel de la fonction DeviceIoControl, le code : //Fonction C int __stdcall LecteurEstDvd(char *pszdrv, void *pmem) { HANDLE hdev; char buff[12]; DWORD n, r = 0; if(!pmem) return 0; *((DWORD*) buff) = 0x5C2E5C5C; // "\\\\.\\" buff[4] = pszdrv[0]; buff[5] = ':'; buff[6] = 0; hdev = CreateFile(buff,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0); if(hdev == INVALID_HANDLE_VALUE) return 0; if(DeviceIoControl(hdev, 2952196, 0, 0, pmem, 4096, &n, 0)) r = (*((DWORD*) pmem) == 0x33); CloseHandle(hdev); return r; } //Fonction ASM _declspec(naked) int __stdcall a_LecteurEstDvd(char *pszdrv, void *pmem) { __asm { mov eax, [esp + 8] mov ecx, [esp + 4] test eax, eax jz Fin0 lea edx, [esp - 12] mov esp, edx mov dword ptr[edx], 5C2E5C5Ch mov eax, [ecx] mov [edx + 4], eax mov dword ptr[edx + 5], 03Ah //":\0" xor eax, eax push eax push eax push 3 push eax push 1 push GENERIC_READ push edx call dword ptr CreateFile cmp eax, -1 je Fin0 mov ecx, [esp + 8] push eax //pour CloseHandle xor edx, edx push edx push edx push 4096 push ecx push edx push edx push 2952196 push eax call dword ptr DeviceIoControl call dword ptr CloseHandle mov ecx, [esp + 8] cmp dword ptr[ecx], 33h je Fin1 Fin0: add esp, 12 xor eax, eax ret 8 Fin1: add esp, 12 mov eax, 1 ret 8 } } En fait, au final, aucun lecteur n'est détecté comme DVD, au moins il s'execute (jsuis content ;). Je pense ke cela vient du cmp dword ptr[ecx], 33h, si kelkun pouvait confirmer et/ou trouver l'erreur, merci :) Merci d'avance :) ++
|
|
dimanche 15 août 2004 à 12:36:44 |
Re : LecteurEstDvd asm inline

BruNews
|
Regarde 'jz Fin0' au debut, tu envoies sur: add esp, 12 ceci crash a coup sur, esp n'a jamais recule auparavant. Faut maitriser la stack avant d'aller plus loin.
ciao... BruNews, Admin CS, MVP Visual C++
|
|
dimanche 15 août 2004 à 13:33:53 |
Re : LecteurEstDvd asm inline

AlexMAN
|
mov eax, [esp + 8] mov ecx, [esp + 4] test eax, eax jnz Continue ret 8 Continue: lea edx, [esp - 12]
Voila le bout de code de debut modifié, c bon non ?
|
|
dimanche 15 août 2004 à 13:39:38 |
Re : LecteurEstDvd asm inline

BruNews
|
ira mieux, maintenant faudra reserver les octets sur pile pour les variables.
ciao... BruNews, Admin CS, MVP Visual C++
|
|
dimanche 15 août 2004 à 14:24:12 |
Re : LecteurEstDvd asm inline

AlexMAN
|
J'ai du mal avec la reservation des octets pour les variables, est ce ke je dois aussi reserver pour DWORD r, n ? Paske pour le handle, jme suis demerdé pour le sauver ds [esp + 4] car on utilise plus pszdrv, mais apres j'ai du mal avec ces variables la. Et surtout sont elles vraiment nécessaires ?
|
|
dimanche 15 août 2004 à 14:31:34 |
Re : LecteurEstDvd asm inline

BruNews
|
on reserve en reculant ESP qu'il faudra ensuite replacer avant de sortir. Dessine ta stack sur papier, c'est utile au debut.
ciao... BruNews, Admin CS, MVP Visual C++
|
|
dimanche 15 août 2004 à 15:12:32 |
Re : LecteurEstDvd asm inline

BruNews
|
Réponse acceptée !
Voila en 15 lignes de moins que VS 2003 avec toutes optimisations. N'utilise que les 3 registres generaux.
C'est pas tres complique mais tu devrais debuter sur des petits trucs beaucoup plus simples. Je repete, dessine ta stack sur papier pour verifier que tu mets les bonnes adresses dans les registres que tu passes en param. Evite aussi les exemples avec DeviceIoControl au debut ou tu risques de graves degats.
__declspec(naked) int __stdcall LecteurEstDvd(char *pszdrv, void *pmem) { __asm { lea ecx, [esp-12] xor eax, eax mov edx, [ecx+16] ; EDX = *pszdrv cmp [ecx+20], eax je short dvdExit ; if(!pmem) return 0 mov ah, ':' mov esp, ecx ; ESP -= 12 mov al, [edx] ; pszdrv[0] mov dword ptr[ecx], 5C2E5C5Ch mov dword ptr[ecx+4], eax ; CreateFile(buff,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0) push 0 push 0 push OPEN_EXISTING push 0 push FILE_SHARE_READ push GENERIC_READ push ecx call dword ptr CreateFile mov edx, esp ; &n mov ecx, [esp+20] ; *pmem cmp eax, -1 je short retZERO push eax ; pour CloseHandle ; DeviceIoControl(hdev, 2952196, 0, 0, pmem, 4096, &n, 0) push 0 push edx ; &n push 4096 push ecx ; *pmem push 0 push 0 push 2952196 push eax call dword ptr DeviceIoControl mov [esp+4], eax ; sauve r call dword ptr CloseHandle ; param deja sur pile, ESP += 4 mov eax, [esp+20] ; *pmem cmp dword ptr[esp], 0 je short retZERO cmp dword ptr[eax], 33h je short cleanSP ; sort en EAX != 0 retZERO: xor eax, eax cleanSP: add esp, 12 dvdExit: ret 8 } }
ciao... BruNews, Admin CS, MVP Visual C++
|
|
dimanche 15 août 2004 à 15:22:38 |
Re : LecteurEstDvd asm inline

AlexMAN
|
Bon ben jte remercie, cette fonction me paraissait pourtant assez simple, mais apparemment trop dur pour moi, jV fouiller pour trouver plus facile. Merci encore
++
|
|
Cette discussion est classée dans : mov, dword, push, eax, edx
Répondre à ce message
Sujets en rapport avec ce message
BeginPaint code débutant [ par TRAX44 ]
Bonjour, le problème est tout simple je comprends absolument pas ce qui marche pas. Le "programme" est censé créer une fenêtre est afficher du texte e
Cycles de mov [ par vecchio56 ]
Je me demandais si les instructions suivantes étaient équivalentes en termes de performances, ou si certaines d'entres elles demandaient plus de cycle
# Export Table - Kernel32.dll - GetProcessAddress # [ par joanna ]
Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la
# Export Table --- Kernell32.dll --- GetProcAddress # [ par joanna ]
Voici le code qui devrait récupérer l'adresse de la fonction "GetProcessAddress" connaissant l'ImageBase du module "kernel32.dll".Malheureusement à la
Ancien code - CreateWindowEx ne fonctionne pas [ par TehWan ]
Je ne comprends vraiment pas pourquoi CreateWindowEx ne fonctionne pas. Je code en ancien code avec MASM32. J'ai même essayé la nouvelle syntaxe (invo
optimisation [ par sajid_morad ]
salut tout le monde , j ai une parti du code en c++, que j ai voulu optimiser , le l ai reécri en asm , mai ça donne pas grand chose, si quelqu un po
Quels sont les parametres (nombre, taille...) [ par Renfield ]
Bonjour,on peut appeler RunDll32 pour executer des fonctions contenues dans des dll...j'aimerais m'affranchir de cette étape, mais j'ai pour cela beso
Problemme avec mes character... XD [ par belette321 ]
J'esseil d'ajouter une commande administrateur a dans un des mes jeux en-ligne, /admin_popup (Fait apparaitre un MSG dans une boite dans le lobby). Un
nombre premier en nasm [ par YAWLY ]
MED.MERZOUG salut tout le monde vous pouvez m'aider si j le compile sa affiche chaque fois le nbr est non premeir > le code est : Section .date ch
out bmp [ par vincent2795 ]
Bonjour, dans ma source, j' essaye de faire un screenshot, et de le nommer pas la date et l' heure ou il es pris. mon problème: si le nom du fichier e
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
|