IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

MFC Discussion :

CreateFile: erreur "privileged instruction"


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Ing�nieur R&D
    Inscrit en
    Juillet 2002
    Messages
    81
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 81
    Par d�faut CreateFile: erreur "privileged instruction"
    Bonjour.

    J'ai cr�� une DLL dont une fonction utilise CreateFile. Celle-ci fonctionne correctement. A pr�sent, je convertis ma fonction en assembleur (l'assembleur int�gr� � VC++). Lors de l'appel de CreateFile, je re�ois syst�matiquement l'erreur "privileged instruction".

    Voici le code qui appelle CreateFile. Rien de bien particulier, mais qui sait... Je pr�cise que Filename est de type char*.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    	push NULL
    	push NULL
    	push OPEN_EXISTING
    	push NULL
    	push FILE_SHARE_READ
    	push GENERIC_READ
    	push FileName
    	call CreateFileA
    En revanche, plus int�ressant, lorsque je lance un debug, voici o� se situe l'erreur (exactement, c'est la derni�re ligne):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    __imp__CreateFileA@28:
    100351D0 76 B4                jbe         __NULL_IMPORT_DESCRIPTOR+172h (10035186)
    100351D2 E5 77                in          eax,77h
    Qu'est-ce que j'ai bien pu faire de travers ? O� alors, y a-t-il quelque chose que je devrais savoir et que j'ignore ?

    Merci d'avance pour vos r�ponses.

  2. #2
    R�dacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur s�curit� informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Chercheur s�curit� informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par d�faut
    Bonjour,

    l'erreur ce produit dans le programme ou dans la dll Kernel32 (qui exporte kernel32, mais le "in" me parait �trange) ?

    En tout cas si c'est dans le porgramme alors il y a un probl�me de compilation, l'instruction "in" �tant r�serv�e aux programmes en ring0 (kernel mode) mais pas aux programmes utilisateurs (user mode).

    Si c'�tait possible j'aimerais bien voir un peu plus de code d�sassembl� (notemment les push/call si c'est par l� que le probl�me ce pose).

  3. #3
    Membre confirm�
    Profil pro
    Ing�nieur R&D
    Inscrit en
    Juillet 2002
    Messages
    81
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 81
    Par d�faut
    L'erreur se produit dans ma DLL.

    Voici le code d�sassembl� de mon appel:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    1000144F 6A 00                push        0
    10001451 6A 00                push        0
    10001453 6A 03                push        3
    10001455 6A 00                push        0
    10001457 6A 01                push        1
    10001459 68 00 00 00 80       push        80000000h
    1000145E FF 75 08             push        dword ptr [ebp+8]
    10001461 E8 6A 3D 03 00       call        __imp__CreateFileA@28 (100351d0)
    Et le code d�sassembl� de l'endroit o� se produit l'erreur (vue un peu plus large cette fois):
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    __imp__CloseHandle@4:
    100351C4 F0 A6                lock cmps   byte ptr [esi],byte ptr [edi]
    100351C6 E5 77                in          eax,77h
    __imp__ReadFile@20:
    100351C8 4E                   dec         esi
    100351C9 AB                   stos        dword ptr [edi]
    100351CA E5 77                in          eax,77h
    __imp__GetFileSize@8:
    100351CC 64 16                push        ss
    100351CE E6 77                out         77h,al
    __imp__CreateFileA@28:
    100351D0 76 B4                jbe         __NULL_IMPORT_DESCRIPTOR+172h (10035186)
    100351D2 E5 77                in          eax,77h   <- L'erreur se produit ici
    __imp__GetCommandLineA@0:
    100351D4 58                   pop         eax
    100351D5 E3 E5                jecxz       __NULL_IMPORT_DESCRIPTOR+1A8h (100351bc)
    100351D7 77 42                ja          __imp__InterlockedIncrement@4+3 (1003521b)
    100351D9 D1 E5                shl         ebp,1
    100351DB 77 45                ja          __imp__GetModuleHandleA@4+2 (10035222)
    100351DD A7                   cmps        dword ptr [esi],dword ptr [edi]
    100351DE E5 77                in          eax,77h
    Ceci est bel et bien pr�sent dans ma DLL.

  4. #4
    R�dacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur s�curit� informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Chercheur s�curit� informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par d�faut
    Hmmm je crois que je comprend mieux, et il semblerait que ce soit normal. En fait tu ne devrais pas passer par un call direct � la fonction, mais par un Call sur jmp IAT, je m'explique:

    en fait il faudrait qu'il y ait un jmp qui pointe sur l'adresse 0x100351d0 et que le call se fasse sur ce jmp.
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    Call 10001000 //call sur le jmp 
     
    10001000 JMP  dword ptr [100351D0] // l'adresse du JMP (10001000) est un exemple
    C'est de cette facon que compile VC pour les call sur API. Le JMP est un saut sur le pointeur contenu en 100351D0. Ce poitneur contient l'adresse � laquelle se trouve createfile.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
     
    __imp__CreateFileA@28:
    100351D0 76 B4                jbe         __NULL_IMPORT_DESCRIPTOR+172h (10035186)
    100351D2 E5 77                in          eax,77h   <- L'erreur se produit ici
    en fait si je ne me trompe pas, ici tu te trouves dans L'IAT (Import adress table) et le call direct fais ex�cuter du code alors que ce sont des pointeurs sur les APIs.

    Possible que le JMP dword ptr [xxx] n'existe pas, il faudra peut �tre le mettre � la main...

    Si tu veux je pourrais toujours jeter un coup d'oeil sur ton prog pour ce qui est du debugging (quitte � le reverser).

    Malheureusement, je ne sais pas comment on fait pour appeler des apis en C++ avec l'asm en inline (je programme directement en asm avec MASM32 pour les routines critiques).

  5. #5
    Membre confirm�
    Profil pro
    Ing�nieur R&D
    Inscrit en
    Juillet 2002
    Messages
    81
    D�tails du profil
    Informations personnelles :
    �ge : 40
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur R&D
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Juillet 2002
    Messages : 81
    Par d�faut
    Suite � ce message, j'ai trouv� la solution. Je viens d'essayer avec:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    call dword ptr CreateFile
    Au lieu de:
    Cette fois cel� fonctionne.

    Merci pour vos conseils.

    P.S: L'adresse de votre site web dans votre profil ne fonctionne pas.

  6. #6
    R�dacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur s�curit� informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : Chercheur s�curit� informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par d�faut
    De rien je n'ai pas fais grand chose, ni compris exactement qu'il s'agissait d'un probl�me de pointeur direct (je pensais plut�t � un jmp sur pointeur), Mais ravi de voir que ca c'est arrang�

    P.S: merci de m'avoir notifi� pour l'adresse...une faute de frappe

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Erreur privileged instruction
    Par colorid dans le forum Langage
    R�ponses: 5
    Dernier message: 20/03/2013, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo