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

Assembleur Discussion :

Avant le reset Windows (XP)


Sujet :

Assembleur

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 29
    Points
    29
    Par défaut Avant le reset Windows (XP)
    Bonjour,

    Je cherche des informations pour depuis une session utilisateur sous WndowsXP :

    * fermer Windows XP
    * quitter le mode protégé et basculer en mode réel et donc sans le "reset"

    Sauf erreur, ce que j'ai compris :
    * la zone mèmoire < à 1Mo n'est pas utilisé par les OS en mode protégé

    Bref, éviter le "reset"... pouvoir "booter" sur une clé USB le plus simplement possible


    Si vous avez des pistes pour les pré-requis...
    Quel fonction ?

    J'utilise NAsm sous GNU/Linux et je n'utilise pas Windows, sauf au boulot
    Edite :
    * PC (Atom, mémoire 1Go)
    * Distribution Xubuntu

    Comme c'est mon premier message, je m'excuse par avance auprès des
    modérateurs si je ne post pas au bonne endroit.

    Cordialement

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 29
    Points
    29
    Par défaut Suite...
    Trouvez sur le "ouaibe" et ajout d'une fonction en alternative.

    Attention !
    Non testé... c'est juste de la doc

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    ; ### !Brouillon! ###
    ; ## Auteur :  sirlifang	 ##
    ; ## 2008-06-06			 ##
    ; ## source : http://en.verysource.com
    ; ## Simple, mais plutot radical.
    ; ## J'ai ajouté la solution InitiateSystemShutdown qui est documenté (msdn)
    ;
    ;# Un utilisateur n'a pas les privilèges pour arrêter le système
    ;# on utilise la fonction "RtlAdjustPrivilege" pour avoir les
    ;# privilèges uniquement sur une SEUL des 2 fonctions "shutdown"
    ;
     
    .386
    .model flat,stdcall 
    option casemap:none
     
    include masm32includew2kntddk.inc
    include masm32includew2kntdll.inc
    includelib masm32libw2kntdll.lib
     
     
    .code
    Main proc
    LOCAL bTemp
     
    	;
    	;## API RtlAdjustPrivilege de ntdll.dll
    	; Active ou non le privilège du processus "X"
    	; A partir de W2K. Sources :
    	; Liste MSDN privilège constant... mais sans les noms :(
    	; msdn.microsoft.com/en-us/library/windows/hardware/ff562046%28v=vs.85%29.aspx
    	; Liste  les noms de privilèges
    	; msdn.microsoft.com/en-us/library/cc234419.aspx
    	; 1) Valeur = Privilège pour SE_SHUTDOWN_PRIVILEGE
    	; 2) = Boolean (! 0) = SE_PRIVILEGE_ENABLED 
    	; 3) Boolean = (! 0) thread ou processus (0) 
    	; Retour = Activé ou désactivé (?!?)
    	;
     
    	invoke RtlAdjustPrivilege,SE_SHUTDOWN_PRIVILEGE,TRUE,FALSE,addr bTemp
     
    	; Fermer W2k/WXP pour reboot
    	; 2 alternatives :
    	; 1- ZwShutdownSystem (W2K,XP)
    	;	API non documenté chez Microsoft !
    	;	fonction de la bibliothèque ntdll (?)
     
    	invoke ZwShutdownSystem,2
     
    	; fermeture applis redémarrage Windows (XP)
    	; 2- InitiateSystemShutdown
    	;	Fonction redémarrage
    	;	lpMachineName=0= machine local
    	;	lpMessage=0 ; aucun message
    	;	dwTimeout=0 ; si zéro pas de boite de dialogue
    	;	bForceAppsClosed=TRUE= fermer applis de force, risque de perte de données
    	;	bRebootAfterShutdown=	FALSE; vide cache et enregistre sur DD
    	;				TRUE ; redémarrer après l'arrêt système
    	; Résultat retour fonction dans eax ; si eax = 0 = erreur, si eax != 0 Ok!
     
    	invoke InitiateSystemShutdown, 0, 0, 0, TRUE, FALSE  
     
    Main endp
    end Main
    Je ne sais si j'ai accès au privilège 0 pour basculer en mode réel (!?!)

    La suite à venir...
    a) Code passage en mode réel ça c'est Ok!
    b) Copie code dans zone <1mo
    c) jmp far vers code
    d) sélection disque USB int BIOS
    f) boot sur clé USB

    Bref, je continu...

    Dans l'attente de vos remarques

  3. #3
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Bonsoir,

    Je me souviens être passé au dessus de ton post sans avoir eu le temps d'y répondre. Je l'ai ensuite oublié parce qu'il était marqué comme lu.

    Citation Envoyé par Valente82 Voir le message
    Je cherche des informations pour depuis une session utilisateur sous WndowsXP :

    * fermer Windows XP
    * quitter le mode protégé et basculer en mode réel et donc sans le "reset"
    Je ne pense pas que Windows XP propose ce genre de chose. Sous Linux, il existe kexec() fait pour « embrayer » sur un autre kernel, ce qui est spécialement utile en cas de crash du noyau lui-même, spécialement quand il est dû à un pilote défectueux.

    Sous Windows, il faudrait probablement faire un service qui se place de lui-même au fond de la pile pour être le dernier à être invoqué lors de la procédure d'extinction mais même ainsi, on ne pourrait être certain que ce soit la dernière chose à être appelée.

    Bref, éviter le "reset"... pouvoir "booter" sur une clé USB le plus simplement possible
    Par contre, tu peux utiliser un bootloader qui, lui, prenne en charge ce genre de fonctionnalité. GRUB est déjà capable de le faire. C'est pratique pour demander au système de rebooter sur un noyau donné et/ou avec certains paramètres, lancer la procédure et aller se faire un café le temps que la machine revienne à niveau. Il s'agit de la commande grub-reboot ou grub2-reboot. Je ne suis pas allé vérifier, mais le projet propose sûrement un utilitaire Windows pour faire la même chose, quoique ce n'est pas certain car il faudrait pour cela accéder à la partition qui héberge l'image de grub.

    Sauf erreur, ce que j'ai compris :
    * la zone mèmoire < à 1Mo n'est pas utilisé par les OS en mode protégé
    Si. Il n'y a absolument rien qui l'en empêche, et heureusement parce que les PC n'ont pas tout de suite été équipés avec 4 Go de mémoire. Mon 486DX33 de 1992 que je considérais déjà comme « moderne », équipé d'un lecteur de CD et d'une SB-16, tout multimédia et qui permettait de faire fonctionner tous les jeux de l'époque, notamment DOOM II et FS5, ne contenait que 4 Mo !

    Par contre, les programmes en mode réel, eux, ne pouvaient dépasser 1 Mo (les 20 bits d'adressage). Donc, quand on a dépassé cette limite, pour pouvoir exploiter la mémoire supplémentaire, il fallait utiliser des techniques permettant de mapper cette mémoire dans l'espace visible. Pour cela, on a utilisé :

    • L'EMS, un système de bancs de mémoire comme sur les 8 bits. On a appelé ça « mémoire paginée » bien que cela n'ait rien à voir avec la pagination actuelle du mode protégé. Toutes les pages occupaient le même espace dans le plan mémoire. On pouvait ajouter beaucoup de mémoire de cette façon mais on ne pouvait accéder qu'à une page à la fois et ça ne permettait pas d'étendre le plan visible ;
    • Le mode v86 : introduit avec le i386, ce mode de conserver l'adressage classique du mode réel tout en utilisant quand même la pagination du mode protégé et, donc, de charger et/ou mapper à volonté des pages des mémoire dans l'espace adressable ;
    • Les DOS Extenders qui passaient du mode protégé au mode réel et vice-versa, en gérant la mémoire et permettant éventuellement de lancer des programmes 32 bits depuis le DOS.


    Un des problèmes est que les premières puces prenant en charge le mode protégé n'étaient pas capable de rebasculer vers le mode réel, ce qui a donné lieu à beaucoup de spéculations sur la cause de ce dysfonctionnement.


    Citation Envoyé par Valente82 Voir le message
    Je ne sais si j'ai accès au privilège 0 pour basculer en mode réel (!?!)
    Ça ne marchera pas parce qu'« InitiateSystemShutDown » ne te rendra pas la main.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 29
    Points
    29
    Par défaut «souvenir souvenir»... et plus!
    @Obsidian

    Bonsoir,

    * «Je ne pense pas que Windows XP propose ce genre de chose (...)»
    En tous les cas, je n'ai rien trouvé comme documentation
    Il me semble qu'il existait un logiciel sous Win95/98 qui basculait directement sur une distribution GNU/Linux depuis un CDRom ?!?

    * (...) Il s'agit de la commande grub-reboot ou grub2-reboot (...)
    Généralement, il est plus souple d'utiliser Sylinux/EXTLINUX.
    C'est mon cas : clé USB LXDE en ext4.
    Au "taf", je suis obligé de rebooter, puis F12 pour sélectionner ma clé USB... je souhaite le faire d'un simple clic sous windows... parce que je suis un gros fainéant!
    Les logiciels pour créer une clé USB personnalisable requièrent Sylinux
    Merci pour l'info de GRUB-reboot... je découvre qu'il s'installe sur une clé USB.

    * Si. Il n'y a absolument rien qui l'en empêche (...)
    Pour la zone mémoire <1Mo la question que je me pose :
    Les vecteurs d'interruptions - mode réel - sont ils toujours en place ?
    D'après les "docs" : oui
    Si la réponse était "non", c'est absolument irréalisable

    * Mon 486DX33 de 1992 que je considérais déjà comme « moderne »
    Et tu as raison !
    Le 486 est un super CPU, je faisais fonctionner OS2 Warp d'I.B.M (500Frs de mémoire), mes débuts à la découverte du "Ouaibe"... Bref, j'ai eu beaucoup de mal à quitter... pour une Redhat.
    P... le temps passe vite

    * Ça ne marchera pas parce qu'« InitiateSystemShutDown » ne te rendra pas la main.
    Je ne sais pas, tu as des infos !?!
    Pourtant msdn indique un code de retour en "eax" si la fonction échoue ou réussi.

    En partant du principe que la doc est fiable, il est envisageable de poursuivre pour pouvoir «passer en brute» en mode réel... quelque que soit le niveau de prilège.
    Ce que je ne trouve pas c'est la procédure d'arrêt de Windows.

    Merci pour ta réponse.

    Un des problèmes est que les premières puces prenant en charge le mode protégé n'étaient pas capable de rebasculer vers le mode réel, ce qui a donné lieu à beaucoup de spéculations sur la cause de ce dysfonctionnement.
    J'avais été à une réunion pour la présentation du Pentium, en discutant avec un "commercial", il m'avait dit ceci :
    A l'époque du "286", premier CPU utilisant le "mode protégé", les "ingés Intel" ne voyaient pas l’intérêt de revenir au "mode réel" pour les programmeurs d'OS. Les Kits de "dev" favorisant et facilitant l'emploi du "mode protégé". Constatant le demi-échec, ils ont optimisé le basculement d'un mode à l'autre... parce que tous le monde utilisait "Dos"
    Le 386sx aurait eu plus de succès que le 386dx car beaucoup plus simple pour un fabricant de "carte mère"...
    C'était un commercial... et Intel présentait son nouveau CPU Pentium... qu'ils ont ensuite échangé gratos à cause d'un bug !
    Voili, voila !

  5. #5
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Citation Envoyé par Valente82 Voir le message
    * Si. Il n'y a absolument rien qui l'en empêche (...)
    Pour la zone mémoire <1Mo la question que je me pose :
    Les vecteurs d'interruptions - mode réel - sont ils toujours en place ?
    D'après les "docs" : oui
    Si la réponse était "non", c'est absolument irréalisable
    Oui, mais ils ne servent plus à rien. Quand tu passes en mode protégé, tu initialises l'IDT où tu veux dans la mémoire et tu remplis cette table avec les vecteurs d'interruption en mode protégé, vecteurs qui sont en fait des descripteurs de huit octets contenant différents types d'informations. Naturellement, ces descripteurs ne peuvent plus non plus pointer les anciens handlers en mode réel.

    Il faut effectivement préserver le premier kilo-octet de mémoire si tu as l'intention de revenir en mode réel et d'y travailler durablement (sinon, tu peux maintenir désactivées les IRQ). Je ne sais pas si tous les O.S. le font mais c'est tout-à-fait possible, parce qu'un kilo-octet de mémoire ne représente vraiment pas grand chose.

    * Mon 486DX33 de 1992 que je considérais déjà comme « moderne »
    Et tu as raison !
    Le 486 est un super CPU, je faisais fonctionner OS2 Warp d'I.B.M (500Frs de mémoire), mes débuts à la découverte du "Ouaibe"... Bref, j'ai eu beaucoup de mal à quitter... pour une Redhat.
    Ah ! On a suivi pratiquement le même cursus. J'ai toujours une boîte d'OS/2 Warp sur mon étagère à l'heure où j'écris. Avec un certain nombre d'heures d'accès à Internet offertes. :-) Ce genre d'offres était alléchant à l'époque. C'était avant l'ADSL. Je ne l'ai jamais installé par manque de place et parce que j'ai embrayé sur une Redhat 6 en 1998 dès que je l'ai pu.

    P... le temps passe vite
    Devant un ordinateur, oui : mon expérience personnelle me fait dire qu'il passe six fois plus vite, environ.

    * Ça ne marchera pas parce qu'« InitiateSystemShutDown » ne te rendra pas la main.
    Je ne sais pas, tu as des infos !?!
    Pourtant msdn indique un code de retour en "eax" si la fonction échoue ou réussi.

    En partant du principe que la doc est fiable, il est envisageable de poursuivre pour pouvoir «passer en brute» en mode réel... quelque que soit le niveau de prilège.
    Ce que je ne trouve pas c'est la procédure d'arrêt de Windows.
    Oui, j'ai posté trop vite : il s'agit en fait, apparemment, de l'équivalent d'un « init 6 ». La fonction va bien te rendre la main et ton programme va se terminer normalement au sein du système, jusqu'à que celui-ci mette fin à tous ses enfants et disparaisse de lui-même.

    J'avais été à une réunion pour la présentation du Pentium, en discutant avec un "commercial", il m'avait dit ceci :
    A l'époque du "286", premier CPU utilisant le "mode protégé", les "ingés Intel" ne voyaient pas l’intérêt de revenir au "mode réel" pour les programmeurs d'OS. Les Kits de "dev" favorisant et facilitant l'emploi du "mode protégé". Constatant le demi-échec, ils ont optimisé le basculement d'un mode à l'autre... parce que tous le monde utilisait "Dos"
    Le 386sx aurait eu plus de succès que le 386dx car beaucoup plus simple pour un fabricant de "carte mère"...
    C'était un commercial... et Intel présentait son nouveau CPU Pentium... qu'ils ont ensuite échangé gratos à cause d'un bug !
    Voili, voila !
    C'est ce qui était expliqué dans la Bible PC de Michaël Tischer. C'est à ce moment-là qu'on s'est aperçu que le « poids » du logiciel sur le marché pouvait être comparable à celui du hardware alors que, de tout temps, la règle était qu'un logiciel devait être écrit pour une machine.

    C'est également ce qui s'est passé avec Itanium, qui était l'occasion idéale pour faire table rase du passé et repartir sur de bonnes bases. Ce fut un échec commercial et ça a retardé de plusieurs années la percée du 64 bits, jusqu'à ce qu'AMD mette au point son architecture, qui lui permettait de rester compatible avec les modes 32 bits et même 16 bits.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Tarn et Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Santé

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 29
    Points
    29
    Par défaut
    Oui, mais ils ne servent plus à rien. Quand tu passes en mode protégé (...)
    Si j'arrive a revenir en mode réel la doc est abondante sur le sujet !

    Ah ! On a suivi pratiquement le même cursus. (...)
    C'est à cette époque que j'ai découvert l'assembleur grâce à un gros pavé sur le 486 ; j'ai oublié l'auteur et perdu le livre.

    (...) il s'agit en fait, apparemment, de l'équivalent d'un « init 6 ». La fonction va bien te rendre la main et ton programme va se terminer normalement au sein du système, jusqu'à que celui-ci mette fin à tous ses enfants et disparaisse de lui-même.
    C'est aussi cette impression... mais j'aimerais vérifier.
    Je précise que j'ai pas Windows... faut que je récupère un PC du "taf"

    C'est également ce qui s'est passé avec Itanium, qui était l'occasion idéale pour faire table rase du passé et repartir sur de bonnes bases. Ce fut un échec commercial et ça a retardé de plusieurs années la percée du 64 bits, jusqu'à ce qu'AMD mette au point son architecture, qui lui permettait de rester compatible avec les modes 32 bits et même 16 bits.
    L'histoire est un éternellement recommencement... même si je n'ai pas suivie les débuts Itanium, il arrivait en terrain dominé par Sun, I.B.M et d'autres avec des produits hardware finis plus OS.
    Les "windows serveur" c'est bien... mais pas pour du "lourd".
    Simple tech, j'ai jamais entendu « on va remplacer nos Sun par des "windows serveur Intel" pour faire comme tout le monde. »
    A l'époque : «pour la PME du Limousin "windows serveur Intel"... c'est bien, pour nous "les grands comptes"... non !»

    Beaucoup de «hors sujet» Obsidian dans ma réponse, mais j'avoue qu'il y a un plaisir certain a comprendre que ma saisi clavier n'est pas du au hasard.

    @+

Discussions similaires

  1. [NB 6.8][RCP] Comportement du Reset Windows
    Par bulbo dans le forum NetBeans Platform
    Réponses: 0
    Dernier message: 14/06/2010, 19h10
  2. Réponses: 5
    Dernier message: 08/05/2007, 18h58
  3. Lancement d'une application avant d'accéder à Windows
    Par benymypony dans le forum Windows
    Réponses: 4
    Dernier message: 10/08/2006, 21h58
  4. Lancer avant windows
    Par Belegkarnil dans le forum Windows
    Réponses: 4
    Dernier message: 14/02/2006, 13h18
  5. Problème d'utilisation select () avant recv sous windows
    Par init dans le forum Développement
    Réponses: 3
    Dernier message: 16/03/2005, 20h36

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