begin process at 2012 05 25 02:37:12
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Processeurs

 > 

X86

 > 

[ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

[ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

dimanche 4 avril 2010 à 04:46:19 | [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

dogloop

J'ouvre ce topic pour essayer de mieux comprendre quelles sont les différentes façons pour accéder à toute la RAM (et aussi peut être la ROM) de mon PC. Ok le principe de la mémoire "protégée" est que j'accéde à la RAM sans déranger les autres programmes et utilisateurs.

Mais si j'ai envie de scanner toute la mémoire de mon PC juste pour voir ce qui s'y passe avec un petit programme simple en assembleur, comment je fais ?

A titre d'exemple voilà un programme simple de scan. mémoire pouvant tourner sous MS-DOS 8088 et me montrant tout ce qui se passe dans un vieux PC disposant de 640 Ko de RAM :

Code :
cld

; open 80 x 50 x 16 text mode (font 8x8)
mov ax, 2
int 16
mov ax, 0x1112
xor bl, bl
int 16

; DS = memory source
; ES = target (video ram)
xor ax, ax
mov ds, ax
mov ax, 47104
mov es, ax

loop_scan:
 ; displaying memory
 xor si, si
 xor di, di
 mov cx, 80 * 49

 loop_disp:                    
  movsb
  inc di
 loop loop_disp

 ; displaying segmentation value
 mov ax, 0x0C20                         ; space char & bright red
 mov word [es:49*160    ], ax
 mov word [es:49*160 + 2], ax
 mov word [es:49*160 + 4], ax
 mov word [es:49*160 + 6], ax
 mov word [es:49*160 + 8], ax
 mov ax, ds
 mov di, 49 * 160 + 8
 call disp_number

 ; key tests
 ; 8, 2, 9, 3, ESC
 xor ah, ah
 int 22
 cmp al, '8'
 jne no_up
  mov bx, ds
  sub bx, 5
  mov ds, bx
 jmp loop_scan
 no_up:
 cmp al, '2'
 jne no_down
  mov bx, ds
  add bx, 5
  mov ds, bx
 jmp loop_scan
 no_down:
 cmp al, '9'
 jne no_page_up
  mov bx, ds
  sub bx, 80 * 49 / 16
  mov ds, bx
 jmp loop_scan
 no_page_up:
 cmp al, '3'
 jne no_page_down
  mov bx, ds
  add bx, 80 * 49 / 16
  mov ds, bx
 jmp loop_scan
 no_page_down:
 cmp al, 27
jne loop_scan

ret

disp_number:
; AX = number to display
; ES = video RAM (usually 0xB800)
; DI = position in video RAM
mov bx, 10
xor dx, dx
mov cx, ax
div bx
add dl, 48
mov byte [es:di], dl
dec di
dec di
mov ax, cx
xor dx, dx
div bx
cmp ax, 0
jne disp_number

ret

à compiler avec NASM.

Au démarrage le segment lu est placé sur 0, en appuyant sur n'importe quelles touches vous verrez le buffer clavier se remplir dans le milieu de l'écran. Les vecteurs d'interruptions tout au début.
Autour de 7840, en appuyant sur les touches vous verrez la pile.
Un peu avant 40000 l'interpréteur de commandes
ensuite 47104 (0xB800) la video ram donc avec l'effet mirroir vous verrez des blocs de caractères changer
et enfin la ROM ... avec du ASCII incompréhensible puisque c'est le code assembleur des routines de bases du PC.



Est-ce que quelqu'un peut me dire quels moyens j'ai pour faire l'équivalent pour visualiser mes 2 Go de RAM ... au moins le début voir ce qui se passe réellement et physiquement (la table d'allocation des blocs de mémoire, le noyau, les programmes, la VIDEO RAM, etc ... )

Est-ce déjà possible, faut il nécassairement que ça soit ROOT qui le fasse ? ou que le programme soit executé comme si c'était un DRIVER ?

Merci
dimanche 4 avril 2010 à 08:12:35 | Re : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

ghuysmans99

Membre Club
Si tu veux faire ça c'est plus facile de le faire sans aucun autre OS. Tu codes ton propre OS en mode protégé avec une GDT qui te permet de lire/écrire où tu veux et après il te suffit de te faire une petite gestion écran.
---
VB.NET is good ... VB6 is better
lundi 5 avril 2010 à 03:09:06 | Re : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

dogloop

Merci pour ta réponse

Donc CD-ROM de boot ?

Mais est-ce si difficile de lancer par exemple mon programme comme un driver pour qu'il est tous les priviléges ?

Comment font les anti-virus qui doivent scanner la mémoire ?

Merci.
lundi 5 avril 2010 à 10:17:57 | Re : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

ghuysmans99

Membre Club
Les antivirus ne scannent pas la mémoire : ils ne font que lire la mémoire de chaque process via l'API ReadProcessMemory sous Windows. Faire un driver demande de très bonnes connaissances du noyau Windows/Linux et c'est beaucoup plus simple de faire un OS "comme ça" si tu veux seulement voir le contenu de ta RAM.
---
VB.NET is good ... VB6 is better
lundi 5 avril 2010 à 18:51:01 | Re : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

patatalo

Membre Club Administrateur CodeS-SourceS
salut,



sous linux, le bootloader s'occupe de passer en mode protégé. Tu trouveras souvent un programme qui s'appele memtest qui peut être lancé au boot mais que je n'ai jamais testé.

Logiquement, la source du code doit également être disponible, c'est le principe même de l'open source.

Sous MS-DOS, scanner l'ensemble de la mémoire suppose la gestion d'un extender memoire type emm386 et donc de passer en mode protégé de toutes manières, je trouve cela bien plus compliqué que de faire son propre bout de code. C'est très simple et en mode protégé, tu n'as pas besoin d'activer la memoire virtuelle pour pouvoir acceder à l'ensemble de la mémoire physique.

Faire ce truc sous windows suppose effectivement la mise en place d'un driver qui s'executera en ring 0. Il y a des fonctions du noyau qui permettent cela du style MapPhysicalToLinear. Tu devras pour cela apprendre la programmation avec D.D.K. de Windows (Device Developpement Kit). Tu devrais également pouvoir trouver des trucs interessants chez sysinternals.

Si tu jettes un oeil sur quelques'unes de mes sources, la plupart traitent de cela mais je ne suis pas un commenteur hors pair. Il y a même un début de Live-CD codé avec nasm.

@++
jeudi 8 avril 2010 à 01:47:39 | Re : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

dogloop

Merci pour toutes ces précisions ...

Oui d'accord que passer par MS-DOS est tordu, ce n'est pas mon but de toutes façons ;-)

C'est quand même incroyable que juste pour utiliser mon processeur comme s'il était presque seul avec une RAM comme sur une carte électronique en lui faisant ignorer l'O.S. le mode protégé et le basculement de contexte, il faille passer par une connaissance de toutes ses docs.

L'informatique des temps modernes devient comme les voitures modernes ; tu l'utilises mais t'as pas à savoir ce qui se passe en dessous ... c'est les "personnes compétentes" qui elles seulent ont le droit de mettre le nez dedans ... enfin c'est mon impréssion pour l'instant ... je changerai d'avis peut être dans quelques temps :-)

Sinon j'ai téléchargé ton code "debugger" ... très utile et bravo pour cette initiative qui permet encore à ceux qui aiment l'informatique de ce savoir ce qui se passe en-dessous.
jeudi 8 avril 2010 à 10:33:15 | Re : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

patatalo

Membre Club Administrateur CodeS-SourceS

Il est normal que tout necessite un minimum d'apprentissage. Une voiture, il faut apprendre à la conduire. Faire sa vidange est une chose, changer son joint de culasse en est une autre qui necessite plus de connaissances dans le domaine.

Pour moi, le plus regrettable en informatique, c'est plutôt qu'il faut connaître l'anglais pour pouvoir se documenter.

L'utilisation du processeur et de la mémoire ne necessite que la lecture de la doc d'intel sur le 386, ce n'est pas si énorme que cela.

Quand j'ai commencé l'informatique, je n'avais pas internet, c'est ce qui m'a le plus manqué: l'accès à la bibliothèque.

@++
mardi 13 avril 2010 à 06:24:10 | Re : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

dogloop

Bien sûr que tout nécessite un minimum d'apprentissage ... mais changer un joint de culasse sur une voiture d'aujourd'hui sera beaucoup plus décourageant que le changer sur une voiture d'il y a 30 ans ... pourtant le principe fondamental du moteur est le même ...

De la même manière que lire ma mémoire sous MS-DOS 16 bits ou un micro. 8 bits demande un peu d'apprentissage et le faire sous un Windows 95 like ou un Linux ... il faut biaiser l'O.S. en lui faisant croire qu'il démarre un driver en ring 0 ...

A force de faire trop de protections et de confort paradoxalement l'informatique devient plus compliquée ...

mardi 13 avril 2010 à 09:18:25 | Re : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

ghuysmans99

Membre Club
Pas vraiment plus compliquée : sans protection mémoire (donc en ring 0 ou en développant ton propre OS) c'est toujours aussi simple.
---
VB.NET is good ... VB6 is better
mercredi 14 avril 2010 à 08:07:01 | Re : [ASM] Que la vie était simple sous MS-DOS 16 bits (scan mémoire physique)

patatalo

Membre Club Administrateur CodeS-SourceS
re,

La protection est de toute manière dépendante du materiel et non du système. Il faudra toujours se plier aux specifications du système sur lequel on veut programmer. Rien d'anormal pour moi.

L'informatique, contrairement à la mécanique dispose d'une compatibilité avec les vieilles spécifications. Que demander de plus ? Nos vieux programmes BIOS/DOS fonctionnent encore. Une aubaine pour une éducation en mal de se mettre à jour...

Tu fais également une erreur en disant qu'acceder à sa mémoire sous D.O.S. est plus facile. Comme déjà dit, l'utilisation d'un extendeur mémoire est moins simple pour moi mais à chacun ses goûts.

Trop de protection ? Eviter que le système ne plante par la faute d'une application buguée ne me paraît pas si excessif. C'est plutôt une amélioration sous jacente à une experience vécue.

De même qu'empêcher l'execution de code dans la pile evite les buffer overflow...

@++

1 2

Cette discussion est classée dans : scan, mov, ds, ax, bx


Répondre à ce message

Sujets en rapport avec ce message

Ennoncés à corriger svp :-) [ par did2604 ] Bonjour à tous,Mon professeur m'a demandé de convertir les énoncés (en langage C) suivants en assembleur, quelqu'un aurait-il la gentilesse de me les petit probleme de debutant [ par freekc ] j'essaie de faire un ptit prog que lorsque l'on rentre son nom prenom etc . Il y est un recapitulatif qui se mette en dessous ms lorsque que le recapi rs232 [ par TRAX44 ] salut,tout premièrement je sais qu'il ya des exemples sur le site!mais mon problème est autre je tiens à comprendre pourquoi mon code ne fonctionne pa Affichage [ par AMENO ] Cher amis aidez moi, c'est une partie de mon examen de noel. et je suis bloquerenfin il 'sagit d'un programme que l'on doit entrer jsuqu a 32 caracter afficher un pixel [ par oclone ] hello, j'aimerais faire une librairie graphique en c++ mais pour cela il faut deja que je puisse afficher un point, j'ai pensé que la meilleur solutio Modifer le vecteur d'interruptions [ par vecchio56 ] Bonjour J'essaie de refaire la source http://www.cppfrance.com/code.aspx?ID=33558 en assembleur (ca consiste à modifier la routine de l'interruption 0 boot system [ par henri12 ] salut je viens de trouver ce code qui permer de lancer un fichier sur une disquettr a: exemple systemje voudrais qu il me lance le jeu pong sur a:  j Affichage décroissant et alphabétique de 2 listes(Nom_Prénom et Note) [ par m_didi9 ] [code=autre]Data SEGMENT Mess1 DB 10,13, 'Entrez la liste des Noms :' DB 10, 13, '$' Mess2 DB 'Entrez la liste des Notes :' DB 10, 13, '$' Mess3 ERREUR DE SEGMENTATION en asm [ par tahsgh ] salam; jai le code suivant ----------------------------------------- global main SECTION . text main : Executer 2 action en meme temps [ par HirOinEvOl ] Bonjour, je souhaite exécuter les deux codes suivant mais simultanément pour qu'ils puissent tournés en parrallèles. Je n'ai trouvé aucun moyen de l


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 6,178 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales