Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Win XP - limitations d'accès au hardware

39 réponses
Avatar
CriCri
Salut l'encyclopédie pour les nuls

J'avais compris que sous Win XP l'accès direct au hardware était
interdit. Et depuis mon passage à XP il y a quelques ans je n'en avais
jamais vraiment eu besoin: une fois j'ai bien reçu une insulte parce que
je voulais m'adresser directement à un périph - mais ce n'était pas
indispensable et j'ai trouvé une autre solution sans devoir chercher
plus loin.

Cependant, suite au discussions récentes concernant certains problèmes
de clavier j'ai découvert que
1. des utilitaires que j'ai écrits il y a longtemps (compilés sous MSC
5 - et que je viens de mettre à jour); qui utilisent de l'assembleur
'inline' - avec des appels aux Int21H, 10H, 13H et 16H - fonctionnent
toujours parfaitement sous XP.
2. je peux toujours me servir de 'debug' dans une console DOS sous
Windows XP pour inspecter et modifier directement la mémoire (en
particulier dans le cas présent des adresses 0000:nnnnH dans le BIOS)
sans aucune contrainte.

Alors où est la réalité? Qu'est qui est autorisé et qu'est-ce qui est
vraiment interdit?
En clair, y a-t-il des accès qui sont réellement interdits, ou peut-on
_tout_ contourner avec des astuces officieux?
Je vais bien sûr poursuivre mes propres tests mais je serais également
intéressé par les expériences des autres.

Amicalement
CriCri

PS - je vais rajouter quelques utilitaires de diagnostic sur mon site
(tout à fait au fond) - que je croyais périmés mais qui finalement ne le
sont pas du tout.

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net

10 réponses

1 2 3 4
Avatar
Patrick D.
Le Fri, 08 Aug 2008 23:21:16 +0200, CriCri a
écrit:


Cependant, suite au discussions récentes concernant certains problèmes
de clavier j'ai découvert que
1. des utilitaires que j'ai écrits il y a longtemps (compilés sous MSC
5 - et que je viens de mettre à jour); qui utilisent de l'assembleur
'inline' - avec des appels aux Int21H, 10H, 13H et 16H - fonctionnent
toujours parfaitement sous XP.
2. je peux toujours me servir de 'debug' dans une console DOS sous
Windows XP pour inspecter et modifier directement la mémoire (en
particulier dans le cas présent des adresses 0000:nnnnH dans le BIOS)
sans aucune contrainte.




mon bouquin ms-dos est dans le fond d'un carton, c'est donc appel aux
souvenirs...

mais s'agit-il d'un adressage du hardware, ou d'un adressage du bios ?
impossible dans le premier cas, mais possible dans le second ?



--
* enlevez '.don't.spam' et '.invalid' de mon adresse eMail si vous voulez
m'écrire *
* Donne un poisson à un homme, il aura à manger pour un jour
* Apprends-lui à pêcher, il aura à manger pour tous les jours de sa vie*
Avatar
Sergio
CriCri a exposé le 08/08/2008 :


Cependant, suite au discussions récentes concernant certains problèmes
de clavier j'ai découvert que
1. des utilitaires que j'ai écrits il y a longtemps (compilés sous MSC
5 - et que je viens de mettre à jour); qui utilisent de l'assembleur
'inline' - avec des appels aux Int21H, 10H, 13H et 16H - fonctionnent
toujours parfaitement sous XP.
2. je peux toujours me servir de 'debug' dans une console DOS sous
Windows XP pour inspecter et modifier directement la mémoire (en
particulier dans le cas présent des adresses 0000:nnnnH dans le BIOS)
sans aucune contrainte.

Alors où est la réalité? Qu'est qui est autorisé et qu'est-ce qui est
vraiment interdit?
En clair, y a-t-il des accès qui sont réellement interdits, ou peut-on
_tout_ contourner avec des astuces officieux?



Dans une boîte DOS (c'est une vraie boîte DOS, pas la ligne de
commande) dans lequel sont lancés les programmes 16 bits,
l'environnement du PC est simulé. Quand tu fais un int 13h, ou un in,
un out, l'environnement de la machine est simulé dans une machine
virtuelle, et ne fera pas de bobo.


--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Avatar
Michel__D
Bonjour,

CriCri a écrit :
Salut l'encyclopédie pour les nuls

J'avais compris que sous Win XP l'accès direct au hardware était
interdit. Et depuis mon passage à XP il y a quelques ans je n'en avais
jamais vraiment eu besoin: une fois j'ai bien reçu une insulte parce que
je voulais m'adresser directement à un périph - mais ce n'était pas
indispensable et j'ai trouvé une autre solution sans devoir chercher
plus loin.

Cependant, suite au discussions récentes concernant certains problèmes
de clavier j'ai découvert que
1. des utilitaires que j'ai écrits il y a longtemps (compilés sous MSC
5 - et que je viens de mettre à jour); qui utilisent de l'assembleur
'inline' - avec des appels aux Int21H, 10H, 13H et 16H - fonctionnent
toujours parfaitement sous XP.
2. je peux toujours me servir de 'debug' dans une console DOS sous
Windows XP pour inspecter et modifier directement la mémoire (en
particulier dans le cas présent des adresses 0000:nnnnH dans le BIOS)
sans aucune contrainte.

Alors où est la réalité? Qu'est qui est autorisé et qu'est-ce qui est
vraiment interdit?
En clair, y a-t-il des accès qui sont réellement interdits, ou peut-on
_tout_ contourner avec des astuces officieux?
Je vais bien sûr poursuivre mes propres tests mais je serais également
intéressé par les expériences des autres.

Amicalement
CriCri

PS - je vais rajouter quelques utilitaires de diagnostic sur mon site
(tout à fait au fond) - que je croyais périmés mais qui finalement ne le
sont pas du tout.



J'ai l'impression en ce qui concerne les interruptions BIOS qu'elles
sont converties dans une fonction équivalente du système en
fonctionnement et sont donc soumis de ce fait aux mêmes permissions
que si la fonction avait été appelé *directement*.

PS1:Il n'est pas possible d'utiliser l'interruption 0x13 que ce soit
avec la ligne de commande ou avec command.com sur les disques internes
par contre c'est possible sur un lecteur de disquette.

PS2:Certaines fonctions de l'interruption 0x21 réagissent différemment.
Avatar
CriCri
Salut

Michel__D a écrit :

J'ai l'impression en ce qui concerne les interruptions BIOS qu'elles
sont converties dans une fonction équivalente du système en
fonctionnement et sont donc soumis de ce fait aux mêmes permissions
que si la fonction avait été appelé *directement*.



Dans une machine virtuelle, c'est possible.

PS1:Il n'est pas possible d'utiliser l'interruption 0x13 que ce soit
avec la ligne de commande ou avec command.com sur les disques
internes par contre c'est possible sur un lecteur de disquette.



Déjà à l'origine Int13H était destiné uniquement à la manipulation de
lecteurs de disquettes et ne marchait pas avec tous les disques durs.

Amicalement
CriCri

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
Avatar
CriCri
Salut

Sergio a écrit :

Dans une boîte DOS (c'est une vraie boîte DOS, pas la ligne de
commande) dans lequel sont lancés les programmes 16 bits,
l'environnement du PC est simulé.



D'ac, tu as raison.
Mais s'il y a plusieurs machines virtuelles, il y a des choses physiques
et réelles qui sont communes à toutes et donc pas simulées: tout au plus
recopiées en permanence et en temps réel.
P. ex. ce qui m'intéressait hier était le registre à 0000:0417 - si je
le modifie dans _une_ machine virtuelle, toutes les autres voient la
valeur changée.
Donc c'est un peu plus compliqué et c'est ça qui m'intrigue...

Quand tu fais un int 13h, ou un in, un out, l'environnement de la
machine est simulé dans une machine virtuelle, et ne fera pas de
bobo.



Oui, mais c'est pareil: si tu utilises Int13H pour formater une
disquette, elle est formatée pour de bon!

Amicalement
CriCri

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
Avatar
CriCri
Salut

Patrick D. a écrit :

mais s'agit-il d'un adressage du hardware, ou d'un adressage du bios
?



Ben le BIOS fait bien partie du hardware...

impossible dans le premier cas, mais possible dans le second ?



...et je cherche justement à savoir ce qui est autorisé, ce qui est
interdit; et quels sont les mécanismes.

Si je lis ou écris un registre dans le BIOS, est-ce que j'y ai un accès
direct, ou s'agit-il d'une copie dans la machine virtuelle? Et comme je
le disais à Sergio, il n'y a qu'un seul registre physique à telle ou
telle adresse dans le seul BIOS physique.

Amicalement
CriCri

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
Avatar
Michel__D
CriCri a écrit :
Salut

Michel__D a écrit :

J'ai l'impression en ce qui concerne les interruptions BIOS qu'elles
sont converties dans une fonction équivalente du système en
fonctionnement et sont donc soumis de ce fait aux mêmes permissions
que si la fonction avait été appelé *directement*.



Dans une machine virtuelle, c'est possible.



Ben je vois pas trop ce que cela change et dans le cas contraire ce
serait plus simple de dire ce qu'il est possible de faire dans une
machine virtuelle par rapport à une machine réelle.

PS1:Il n'est pas possible d'utiliser l'interruption 0x13 que ce soit
avec la ligne de commande ou avec command.com sur les disques
internes par contre c'est possible sur un lecteur de disquette.



Déjà à l'origine Int13H était destiné uniquement à la manipulation de
lecteurs de disquettes et ne marchait pas avec tous les disques durs.



En réalité lors d'un accés à une disquette l'appel à l'interruption
0x13 est redirigé vers le vecteur d'interruption 0x40.
Avatar
CriCri
Re-salut

Michel__D a écrit :
Michel__D a écrit :

J'ai l'impression en ce qui concerne les interruptions BIOS...



Pour BIOS lire DOS, bien sûr.

CriCri a écrit :

Dans une machine virtuelle, c'est possible.



Ben je vois pas trop ce que cela change...



Que dans une machine _physique_ il n'y a qu'un seul tableau de vecteurs
d'interruptions au tout début de la mémoire _physique_. Que ça dépend du
microcode du processeur et qu'on ne peut pas le modifier.
Donc si tu changes un vecteur, tu le changes pour tout le monde.
Me semble que dans un système multitâche ça pourrait semer la pagaille
partout: ça équivaut à ré-écrire DOS.

En réalité lors d'un accés à une disquette l'appel à l'interruption
0x13 est redirigé vers le vecteur d'interruption 0x40.



Je ne savais pas ça.
On pourrait donc appeler ce virtuel 'Int40H' directement?

WAIT ;-)
CriCri

--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
Avatar
Michel__D
CriCri a écrit :
Re-salut

Michel__D a écrit :
Michel__D a écrit :

J'ai l'impression en ce qui concerne les interruptions BIOS...



Pour BIOS lire DOS, bien sûr.



Non je voulais bien dire que tes appels aux interruptions BIOS sont
remplaçées par des fonctions équivalentes du système en cours de
fonctionnement (ou si tu préfére elle sont émulées) et sont donc
soumis aux mêmes restrictions d'utilistation que si ces fonctions
avaient été lançées directement.

Au fait il n'y a pas de DOS sous XP.

CriCri a écrit :

Dans une machine virtuelle, c'est possible.



Ben je vois pas trop ce que cela change...



Que dans une machine _physique_ il n'y a qu'un seul tableau de vecteurs
d'interruptions au tout début de la mémoire _physique_. Que ça dépend du
microcode du processeur et qu'on ne peut pas le modifier.
Donc si tu changes un vecteur, tu le changes pour tout le monde.
Me semble que dans un système multitâche ça pourrait semer la pagaille
partout: ça équivaut à ré-écrire DOS.



Hum, c'est un peu plus compliqué en mode protégé (depuis le 80386) avec
les *System Address Registers*
GDTR (Global Descriptor Table Register),
IDTR (Interrupt Descriptor Table Register),
LDTR (Local Descriptor Table Register),
TR (Task State Segment Register).

En réalité lors d'un accés à une disquette l'appel à l'interruption
0x13 est redirigé vers le vecteur d'interruption 0x40.



Je ne savais pas ça.
On pourrait donc appeler ce virtuel 'Int40H' directement?



Oui pourquoi pas si tu respecte le traitement effectué avant la
redirection vers le vecteur 0x40.
Avatar
CriCri
Salut

Michel__D a écrit :

...tes appels aux interruptions BIOS...



Mais normalement je ne fais pas appel aux interruptions BIOS
(c'était exceptionnel pour le truc du clavier l'autre jour).
Si j'ai oublié ma montre je fais (par exemple)
mov ah,2ch
int 21h
...en faisant appel à _DOS_
(ce qu'il fait après et où il va creuser la réponse ne me regarde pas)

Au fait il n'y a pas de DOS sous XP.



Dis-moi plus.
Même si ce n'est pas pareil pour NTFS, XP peut tourner sous et manipuler
des disques (qui n'ont pas changé) formatés FAT32.
Donc quoi qu'on les appelle il doit avoir des fonctions équivalentes du
type DOS ('Disque Operating System') dans le sens large (pas MS-DOS) -
pour la trilogie ouvrir - lire/écrire - fermer etc.

Hum, c'est un peu plus compliqué en mode protégé (depuis le 80386)
avec les *System Address Registers*



Merci pour ces infos. Je n'ai pas travaillé en assembleur 80x86 depuis
le 80186 (mon intérêt et boulot étant pour les 680x0, d'une
architecture orthogonale et propre; et toujours plus performante -
génération par génération et MHz pour MHz).

Mais ça soulève certaines questions:
1. Un DOS (MS-, DR-, GEM-, Caldéra etc) antérieur au 80386 ne connaît
rien à ces registres, donc ne va pas les initialiser. Avec leurs
valeurs par défaut je suppose donc que le proc se comporte comme un 80186.
2. Si j'ai bien compris tes explications on pourrait créer des machines
virtuelles sur un 80386 avec un DOS adéquat, sans avoir recours à un OS
à un niveau plus haut.

Oui pourquoi pas si tu respecte le traitement effectué avant la
redirection vers le vecteur 0x40.



Faudrait que je ressorte SoftICE ;-) - mais c'est juste par curiosité.

Amicalement
CriCri
--
bitwyse [PGP KeyID 0xA79C8F2C]
Les conseils - c'est ce qu'on demande quand on connaît déjà la réponse
mais aurait préféré ne pas la savoir.
http://www.le-maquis.net
1 2 3 4