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 :

VC++ , "Sysenter" refus� en inline asm !!


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm� Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par d�faut VC++ , "Sysenter" refus� en inline asm !!
    J'utilise VC++ (dans Visual Studio .net 2003). Dans la doc en ligne, il est bien sp�cifi� que VC++ supporte, en assembleur en ligne, toutes les instructions du Pentium ... et pourtant ... "Sysenter" est refus�. Sur le m�me PC et sous l'assembleur en ligne de Delphi, cette instruction "passe" sans soucis ... mais j'ai quitt� Delphi, c'est VC++ maintenant. Peut �tre une option du compilateur, j'ai cherch�, mais n'ai pas trouv�. En tout cas, si l'asm inline sous Visual Studio C++, refuse l'instruction "Sysenter" ... c'est un foutu bide !
    Si y'a des id�es sur le sujet, elles sont les bien venues

  2. #2
    mat.M
    Invit�(e)
    Par d�faut Re: VC++ , "Sysenter" refus� en inline asm !!
    Citation Envoy� par - Robby -
    J'utilise VC++ (dans Visual Studio .net 2003). Dans la doc en ligne, il est bien sp�cifi� que VC++ supporte, en assembleur en ligne, toutes les instructions du Pentium ... et pourtant ... "Sysenter" est refus�. Sur le m�me PC et sous l'assembleur en ligne de Delphi, cette instruction "passe" sans soucis ... mais j'ai quitt� Delphi, c'est VC++ maintenant. Peut �tre une option du compilateur, j'ai cherch�, mais n'ai pas trouv�. En tout cas, si l'asm inline sous Visual Studio C++, refuse l'instruction "Sysenter" ... c'est un foutu bide !
    Si y'a des id�es sur le sujet, elles sont les bien venues
    Je ne connais pas cette instruction _asm apparemment c'est pour acc�der au ring 0.
    Mais si Delphi le permet rien ne prouve que cela soit une instruction stable.
    Et c'est pour cela que VC++ l'interdit.

    Sinon il faut peut-�tre utiliser des directives de pr�compilation comme #ifdef __Pentium || _i586 , quelque chose dans ce genre.....

  3. #3
    Membre confirm� Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par d�faut
    Merci mat.M ... c'est courageux de m'avoir r�pondu
    C'est une instruction du jeu d'instruction du processeur, au m�me titre que "mov eax, ebx" ... oui, elle est beaucoup moins connue. Ce qui est curieux, c'est que si je la code manuellement en pla�ant les codes hexa correspondants ... si je place un point d'arr�t ... le debugger me "d�code" bien un "sysenter". Par contre � la compilation, il refuse ... et m'indique ... Error 2400, erreur d'opcode, trouv� "newline" ... newline ??? ...
    Sympa de m'avoir r�pondu ...

  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
    Hello Robby


    Oui, VC++ (m�me 2005) refuse d'inliner certaines instructions...

    Quand VC++ refuse d'inliner, je me fais moi-m�me ma tambouille...

    // edit�, la solution est donn�e par Robby en dessous

    Enfin si ca se trouve, il y a vraiment possibilit� d'inliner ces instructions qu'apparament VC refuse (type : SYSENTER, SYSEXIT, UD1, UD2, SALC, RDPMC, etc.) mais je ne le connais pas...

  5. #5
    Membre confirm� Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par d�faut
    Merci Neitsa ... sympa !
    Trop tard, j'analyse tout �a demain.

    PS:
    ou ....
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #define Sys_enter  __asm _emit 0fh  __asm  _emit 34h
    ...
    __asm
    {
    ...
    Sys_enter
    ...
    }
    Je reprends ton message et tes infos demain, promis.
    Bonne nuit � toi.

  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
    Argh !

    Tu peux oublier tout ce que j'ai �crit... __emit est bien ce qu'il faut dans ce cas l�, je l'avais compl�tement oubli� celui-l�, pourtant je m'en suis d�j� servi... Ca doit d'ailleurs �tre express�ment pour les instructions que le compilo ne sait pas inliner.

    Et c'est beaucoup plus simple comme ca !

  7. #7
    Membre confirm� Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par d�faut
    Hello Neitsa.
    Mais ... fallait pas enlever ton code comme �a ... du code s'est toujours int�ressant ...
    Je trouve hallucinant qu'un compilo comme celui de VC++ refuse l'instruction "Sysenter" .... c'est fou ... d'autant que si tu forces le codage manuellement, et que tu vas voir via le debugger (du dit VC++) ... le "Sysenter" est reconnu !!! Oui Neitsa, il y a peut �tre une "option" du compilateur qui nous �chappe ... mais si cette instruction n'est r�ellement pas reconnue ... c'est une farce monumentale ! A part �a, M$ indique bien dans la doc (du dit VC++) que pour l'asm en ligne, "toutes" les instructions du Pentium sont reconnues ... ahah ! Ceci dit Neitsa ... j'ai tapp� un "sysenter" dans mon driver ... et le compilo du ddk refuse �galement (mais bon, le ddk, c'est aussi M$) ... avec le m�me message d'erreur : "2400 - Erreur d'opcode - trouv� newline". Je n'ai trouv� aucune info sur ce "trouv� newline".
    Je laisse le sujet encore un moment avant d'afficher "r�solu" ...
    Si quelqu'un sait quelque chose, il est le bien venu.

  8. #8
    Membre confirm� Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par d�faut
    Je viens de poser la question par internet directement au support technique de Microsoft France. Je vous tiens au courant.

  9. #9
    mat.M
    Invit�(e)
    Par d�faut
    L'assembleur en ligne est la pour faire des petites optimisations.

    Pour reellement introduire du code assembleur il vaut mieux "compiler" avec un langage assembleur comme TASM ou MASM pour avoir un fichier .obj et le lier a l'executable.

  10. #10
    Membre confirm� Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par d�faut
    Je respecte infiniment ton avis mat.M ... quelque part, je suis d'accord avec toi. Mais ... rien n'interdit de placer autant de code assembleur en ligne que tu veux. Ceci dit ... sur un plan purement intellectuel et de pens�e ... oui ... l'assembleur en ligne, dans un langage de haut niveau, n'est pas fait pour "faire" de l'assembleur ... Ma recherche concernant "Sysenter" est autre ... Je cherche � ex�cuter une de mes fonctions "user" en mode kernel, via une table de services systeme n�2 construite au d�part de mon driver ... et via un syscall (sysenter) depuis le user. J'ai d�j� r�ussi cela en utilisant mon dit driver, DeviceIoControl et un CallBack. Mais l'utilisation d'une table de services perso et d'un Sysenter ... �a m'amuse pas mal aussi.

  11. #11
    Membre confirm� Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par d�faut
    J'ai donc "pos�" le soucis au support technique de Microsoft France. L'�change a �t� �tabli et un ing�nieur du support technique a �t� d�l�gu� � ma demande de support. Celui-ci a "test�" le soucis pos� par l'instruction "sysenter" et reconnait ... 1) que le soucis existe en effet (dans VS.Net 2003, mais aussi dans le 2005) 2) qu'il s'agit d'un d�faut du produit (il a lui m�me utilis� le terme de "d�faut") ... la doc du produit sp�cifiant bien que tous les opcodes du pentium sont accept�s par l'asm en ligne de VS.Net 2003. A noter que "sysenter" n'est pas la seule instruction refus�e, il y en a d'autres. Cet ing�nieur microsoft me signale qu'il transmet "ce soucis" � son "groupe produit". Il me tiendra au courant bien entendu, et je ferai de m�me sur le forum.

  12. #12
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    sysenter c'est pentium II non ?

  13. #13
    Membre confirm� Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par d�faut
    Sysenter c'est "depuis" le P2 (et la suite) ... cette instruction est fondamentale ... toutes les fonctions export�es par NtOskrnl sont appel�es via cette instruction sous Xp et suivants. Avant le systeme utilisait un " INT 2E" ... maintenant c'est Sysenter. Sysenter est programm� par le syst�me (registres MSR du processeur) et permet 1) le passage en ring0 2) d'atteindre la routine " KiDispatchService ". Cette routine dispatche les demandes suivant une table d'adresses "KiServiceTable". Il y a en fait plusieurs tables. Les fonctions de NtOskrnl, c'est la table n�0, Win32K.sys la table n�1 Ces diff�rentes tables sont g�r�es par une "table des tables"... " KeServiceDescriptorTable ". Voila, pour donner deux mots d'explications.

  14. #14
    Expert confirm�

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 43
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par d�faut
    sysenter c'est avec les procs Intel seulement. Pour AMD c'est syscall, et m�me sous XP �a peut �tre int 2E si le processeur est ancien.
    http://www.codeguru.com/Cpp/W-P/system/devicedriverdevelopment/article.php/c8223/
    Ma question c'est par rapport au fait que
    M$ indique bien dans la doc (du dit VC++) que pour l'asm en ligne, "toutes" les instructions du Pentium sont reconnues
    et que Pentium, c'est pas Pentium II

  15. #15
    Membre confirm� Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    D�tails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Par d�faut
    Apr�s avoir re�u, d�licatement bien entendu ... certains avis sur cette recherche concernant Sysenter ... recherche, habilement et d�licatement point�e comme �tant inutile et d�su�te, digne de l'aiguille dans le foin ... je pr�f�re me ralier � la majorit�, pr�f�rant de loin la s�renit� � l'opposition, m�me si cette derni�re est d�licate et "fleurie". Personnellement, je ne suis pas tenu de produire et de rentabiliser quoi que ce soit ... ce qui me permet de creuser plus loin que les limites commun�ment admises du bon sens. Mais si cela irrite certains, m�me minoritaires ... alors, laissons donc cela ... par simple sagesse. Continuons d'acheter des produits, plus ou moins parfait, et disons nous que ... bah ... �a tourne quand m�me pas trop mal. Je pense que le sujet est donc r�solu. Merci a toux ceux qui y ont particip�.

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

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