Partage
  • Partager sur Facebook
  • Partager sur Twitter

[ASSEMBLEUR x86] Instructions IN et OUT

Les instructions IN et OUT sont illégales (je crois)

    17 mars 2024 à 13:34:51

    Bonjour ! Je suis sous Windows 64 bits, je programme avec NASM en 32 bits.

    J'essaye d'apprendre à utiliser les instruction IN et OUT directement depuis l'espace utilisateur. J'ai donc essayé ce petit code :

    segment .data
    	format db "%x", 0
    
    segment .text
    	global _main
    	extern _printf
    
    	_main:
    		in eax, 0x60
    		push eax
    		push format
    		call _printf
    		add esp, 8
    		ret

    En l'exécutant, une erreur survient et un pop-up s'affiche me signalant que j'utilise une instruction privilégiée. Je réessaye donc en l'exécutant en tant qu'administrateur. Seulement là, rien ne se passe. Alors j'exécute mon programme avec gdb, et là il retourne une erreur disant que l'instruction est illégale (SIGILL).

    Ai-je bien compris le fait que l'instruction IN est illégale ? Est-il possible de l'exécuter quand même ?

    Merci par avance !

    -
    Edité par Yixraie 23 mars 2024 à 15:41:43

    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2024 à 14:01:01

      Les instructions IN et OUT sont parfaitement légales.

      Mais.

      Elles provoquent une exception quand on tente de les faire exécuter dans un mode qui ne l'autorise pas.

      Les modes privilégiés sont ceux des couches basses du noyau, qui seules  ont le droit d'accéder directement aux périphériques (et aux ports qui permettent de les piloter). Et c'est interdit aux autres, qui pourraient mettre le souk par mégarde, ou malfaisance.

      Il ne suffit pas d'être administrateur, qui lui ausi fait tourner ses processus en mode privilégié, mais à qui le système donne plus de permissions, comme accéder aux fichiers des autres, mais pas d'aller taper directement dans les ports d'E/S ou n'importe où en mémoire,

      -
      Edité par michelbillaud 26 mars 2024 à 14:09:42

      • Partager sur Facebook
      • Partager sur Twitter
        27 mars 2024 à 1:05:06

        Ça me fait regretter mon vieux Z80 dans lequel je pouvais tout faire ... y compris foutre le bordel dans la machine.
        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          27 mars 2024 à 14:20:15

          Tu peux toujours sur un PC, si tu le fais tourner en mode réel.

          • Partager sur Facebook
          • Partager sur Twitter
            28 mars 2024 à 17:01:44

            michelbillaud a écrit:

            c'est interdit aux autres, qui pourraient mettre le souk par mégarde, ou malfaisance.

            C'est vrai que ça paraît assez normal.

            michelbillaud a écrit:

            Tu peux toujours sur un PC, si tu le fais tourner en mode réel.

            Ah c'est intéressant ! Comment je peux activer ce mode ? Dans le bios j'imagine ? Est ce qu'il y a des précautions particulières à prendre ?

            • Partager sur Facebook
            • Partager sur Twitter
              28 mars 2024 à 23:31:51

              A mon avis, dans un programme lancé par Windows ou Linux, c'est pas possible, parce que les processus tournent en mode protégé. Protection indispensable dans un système où il y a plein de processus susceptibles de déconner. Ils ont accès à leur espace memoire personnel  et c'est tout. Pour le reste, ils font un syscall pour demander au système de faire des choses pour eux (et le système vérifie que c'est autorisé).

              Dans les temps anciens, le démarrage  BIOS et l'execution du bootsector  se faisaient en mode réel, pour des raisons de compatibilité (pouvoir lancer ms-dos !). Je n'ai pas regardé de près, mais depuis le démarrage UEFI, j'ai cru comprendre que ce n'était plus le cas.

              Va falloir chercher sur internet si tu veux vraiment faire ca.... bonne lecture et bon courage (c'est pas de la tarte)

              -
              Edité par michelbillaud 28 mars 2024 à 23:36:28

              • Partager sur Facebook
              • Partager sur Twitter

              [ASSEMBLEUR x86] Instructions IN et OUT

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown