Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2672 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Acces direct mémoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Acces direct mémoire

n°250707
Bleuarff
pouet
Posté le 21-11-2002 à 15:46:26  profilanswer
 

Est-ce qu'en c (pas c++) il existe qqchose ressemblant au tableau prédefini Mem en pascal ? A savoir, un tableau qui permet d'acceder directement à la mémoire, pour entre autre modifier directement l'affichage à travers la mémoire vidéo ?


---------------
©2008 Bleuarff Corp.
mood
Publicité
Posté le 21-11-2002 à 15:46:26  profilanswer
 

n°250830
tlam
Posté le 21-11-2002 à 17:19:03  profilanswer
 

Sous quel OS tu veux le faire ?
 
Je sais que sous Windoz par exemple, tu ne peux accéder directement à la mémoire que dans un driver

n°250857
blackgodde​ss
vive le troll !
Posté le 21-11-2002 à 17:55:55  profilanswer
 

non ?!? Bleuarff au cpp ?!? :p
 
dsl g pas de reponse à ta question :(


---------------
-( BlackGoddess )-
n°250860
El_gringo
Posté le 21-11-2002 à 18:00:35  profilanswer
 

tlam a écrit a écrit :

Sous quel OS tu veux le faire ?
 
Je sais que sous Windoz par exemple, tu ne peux accéder directement à la mémoire que dans un driver




 
Bah non, quand tu fais des malloc, t'accède bien directement à la mémoire !

n°250863
BENB
100% Lux.
Posté le 21-11-2002 à 18:02:49  profilanswer
 

El_Gringo a écrit a écrit :

 
 
Bah non, quand tu fais des malloc, t'accède bien directement à la mémoire !




Tu crois ca toi...

n°250864
El_gringo
Posté le 21-11-2002 à 18:03:57  profilanswer
 

BENB a écrit a écrit :

 
Tu crois ca toi...




 
Ben accès direct à certaines zones mémoire réservées, en tout cas, non ?

n°250868
Bleuarff
pouet
Posté le 21-11-2002 à 18:08:18  profilanswer
 

je suis sous windows.
un malloc permet de voir l'etat de la memoire (dsl, newbie inside) ?
Ce que je veux en fait, c récuperer les octets de la memoire video afin de pouvoir recuperer ce qui est ecrit. En gros je veux me servir de la memoire video comme un tableau en lecture.


---------------
©2008 Bleuarff Corp.
n°250945
sombresong​e
Posté le 21-11-2002 à 20:48:34  profilanswer
 

Acceder à la memoire sous windows comme tu le ferais sous Dos c pas possible parceque windows tourne en mode protéger donc le mode d'acces de type segment:offset n'a rien à voire avec le dos :o  
 
Quoiqu'il en soit si tu veut acceder à la mémoire video sous windows comme tu le faisait sous dos. Bah t'utillise l'emulation du mode 13h ou du mode X sous DirectX. L'autre moyen c de passer par des fonction tiers programmer en Assembleur (pas le inline hein! un vraix assembleur
 
fait des fonction ASM qui ont cette gueulle:
 

Code :
  1. init_grapfx()
  2. mov ax,13h
  3. int 10h
  4. draw_point(x,y,col)
  5. mov ax,0A000h
  6. mov es,ax
  7. mov ax,320
  8. mul y
  9. add ax,x
  10. mov di,ax
  11. mov al,col
  12. mov es:[di],al

n°250977
mrbebert
Posté le 21-11-2002 à 21:36:16  profilanswer
 

El_Gringo a écrit a écrit :

 
 
Bah non, quand tu fais des malloc, t'accède bien directement à la mémoire !



Tu accèdes à la mémoire de ton processus uniquement.
Chaque processus à son propre adressage, qui ne correspond pas à l'emplacement physique dans la RAM.
En effet, la zone mémoire pointée par le résultat du malloc peut être enlevée de la mémoire pour être mise dans le swap, restaurée mais pas forcément au même endroit.
Pour ton programme, c'est toujours la même adresse, mais son emplacement dans la RAM peut varier.

n°250997
Bleuarff
pouet
Posté le 21-11-2002 à 22:10:31  profilanswer
 

sombresonge> merci bien, mais c pour des projets en école d'info, pas le droit d'utiliser autre chose que du c dans un projet de c. Mais merci, ça va surement me servir ailleurs.


---------------
©2008 Bleuarff Corp.
mood
Publicité
Posté le 21-11-2002 à 22:10:31  profilanswer
 

n°251225
BENB
100% Lux.
Posté le 22-11-2002 à 10:06:42  profilanswer
 

El_Gringo a écrit a écrit :

 
 
Ben accès direct à certaines zones mémoire réservées, en tout cas, non ?




 
Ben le malloc est un appel systeme, donc a priori tu n'accede pas directement à la memoire. Ensuite l'adresse que tu obtiens est virtuelle, tu ne sais pas ou elle se trouve reelement dans la RAM, car quand le systeme gere sa memoire il peut deplacer les processus (pour les mettre dans le swap par exemple, mais pas uniquement) tu es donc loin d'acceder directement à la memoire...

n°252388
Musaran
Cerveaulté
Posté le 24-11-2002 à 02:50:57  profilanswer
 

S'il n'y a pas d'OS protecteur, on peut faire ça:

Code :
  1. char* mem= (char*)0;
  2. mem[0xC0000]= 1; //A dieu va !


Mais l'accès direct au matériel est une chose dangereuse.


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
n°252395
HelloWorld
Salut tout le monde!
Posté le 24-11-2002 à 04:17:39  profilanswer
 

Citation :

Est-ce qu'en c (pas c++) il existe qqchose ressemblant au tableau prédefini Mem en pascal ? A savoir, un tableau qui permet d'acceder directement à la mémoire, pour entre autre modifier directement l'affichage à travers la mémoire vidéo ?


 
Ta question n'a de sens que sous DOS (mode réel) car :
- en mode protege, comme on te l'a dit, tu n'a pas acces a la memoire physique mais a la mémoire virtuelle. Il existe néanmoins des dll qui permettent d'ecrire a un endroit particulier en memoire physique (voir winio ici : http://www.internals.com)
- tu ne sais tout simplement pas où se trouve la mémoire video. Celle-ci est gérée par le driver et son adresse est spécifique à chaque carte graphique.
 
Attention à ne pas confondre un programme DOS 16 bits exécuté depuis Windows et un programme Windows 32 bits.
Le premier travaille en mode réel et va appeler les routines du BIOS VGA pour sélectionner un mode graphique et va directement manipuler la mémoire video.
Le second va faire appel a une librairie genre DirectX pour activer un mode et obtenir un pointeur sur un buffer video qu'il va directement manipuler comme un tableau.
 
Il y a fort a parier que tu sois dans le premier cas, auquel cas on déclare généralement un pointeur vers la mémoire vidéo de cette manière :
 

Code :
  1. unsigned char * mem_video = (unsigned char *)(0xA0000L);


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°252794
Bleuarff
pouet
Posté le 25-11-2002 à 11:16:04  profilanswer
 

merci bien de cette explication :jap:
vu que je fait des app console win32 c pas possible...Sauf à passer par l'asm si j'ai bien compris ? Si il est possible de compiler un prog asm  en .lib afin de l'integrer au projet.
Menfin je connais rien à l'asm, alors je vois pas comment je pourrait coder un truc comme ça..Pour info en pascal je fais ça:
 

Code :
  1. function getline(x,y,len:byte):string;
  2.          var temp:string;
  3.              pos:integer;
  4.              i:byte;
  5. begin
  6.      temp:='';
  7.      pos :=(y-1)*160+(x-1) * 2;//position du premier octet
  8.      for i:=0 to len-1 do //pour une chaine de len caracteres
  9.          temp := temp + Char(Mem[$B800:pos+i*2]);//lecture de 1 octet sur 2-> ceux codant le caractere
  10.      getline:=temp;
  11. end;


---------------
©2008 Bleuarff Corp.
n°252829
HelloWorld
Salut tout le monde!
Posté le 25-11-2002 à 11:51:54  profilanswer
 

Passer par l'asm ne changera rien.
Utilise la dll dont j'ai donné le lien.
Mais meme avec CA NE MARCHERA PAS, parce que en mode protege, a l'adresse B0000, il n'y a RIEN.
Tout ce que tu vas arriver a faire c'est planter le systeme en ecrivant n'importe ou.
B0000 n'est pas l'adresse video sous Windows.
2 solution :
- tu continue avec ton B0000 et dans ce cas tu créé un programme DOS 16 bits avc un compilateur DOS 16 bits genre bc++
- tu utilises DirectX, tu passes en mode Text, et tu ecris comme tu veux dans le buffer que DirectX te donne


Message édité par HelloWorld le 25-11-2002 à 11:55:10

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°252834
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-11-2002 à 12:03:27  profilanswer
 

Bleuarff a écrit a écrit :

 
vu que je fait des app console win32 c pas possible...Sauf à passer par l'asm si j'ai bien compris ?




 
note qu'en Pascal ça ne serait pas possible non plus si tu fais un prog win32 je pense...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°252841
HelloWorld
Salut tout le monde!
Posté le 25-11-2002 à 12:09:37  profilanswer
 

Oui d'aileur c'est vrai ca, ton code PASCAL là c'est du code 16 bits.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°252843
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-11-2002 à 12:11:17  profilanswer
 

D'ailleurs sous Delphi (du Pascal mais sous Windows) "Mem" n'existe pas...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°252845
Bleuarff
pouet
Posté le 25-11-2002 à 12:12:35  profilanswer
 

merci bien, j'abandonne donc. (directx c pour du c++, ça marche dans un .c ?)


---------------
©2008 Bleuarff Corp.
n°252847
El_gringo
Posté le 25-11-2002 à 12:13:09  profilanswer
 

antp a écrit a écrit :

D'ailleurs sous Delphi (du Pascal mais sous Windows) "Mem" n'existe pas...




 
Juste pour info : Delphi, c un langage ou en environnement de programmation du coup ?

n°252848
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-11-2002 à 12:13:19  profilanswer
 

Bleuarff a écrit a écrit :

merci bien, j'abandonne donc. (directx c pour du c++, ça marche dans un .c ?)




 
à priori DirectX c'est pour ce que tu veux (ça marche aussi en Delphi :D)


Message édité par antp le 25-11-2002 à 12:17:07

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°252850
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-11-2002 à 12:16:54  profilanswer
 

El_Gringo a écrit a écrit :

 
 
Juste pour info : Delphi, c un langage ou en environnement de programmation du coup ?




 
c'est assez délicat
Delphi = EDI+RAD utilisant une version un peu modifiée du Pascal comme langage.
Donc c'est du Pascal Objet, mais j'ai lu je sais plus où que Borland aimerait bien appeler le langage "Delphi".
J'imagine que c'est pour pouvoir continuer à le faire évoluer plus librement...


Message édité par antp le 25-11-2002 à 12:17:32

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°252853
El_gringo
Posté le 25-11-2002 à 12:18:34  profilanswer
 

...Et kylix (ss linux), c encore un autre "langage" ?
Finalement, c'est carrément fermé comme techno. Un seul environnement pour un langage. ça me rappel un certain "Visual Basic" :D

n°252854
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-11-2002 à 12:21:37  profilanswer
 

Kylix = Delphi + C++Builder sous Linux
 
Bah oui le langage est moins répandu, mais je vois pas en quoi ça rend la technologie "fermée"
un soft fait avec VC++ et les MFC est pas nécessairement plus ouvert, à part que le MSC++ utilisé ressemble fort à du C++ :D
 
Mais y a quand même au moins un compilo libre qui supporte le langage de Delphi :
 
http://www.freepascal.org/


Message édité par antp le 25-11-2002 à 12:22:19

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°252856
HelloWorld
Salut tout le monde!
Posté le 25-11-2002 à 12:25:05  profilanswer
 

Y'aurait peut etre une autre solution.
Tu te créé ton buffer à toi, tu écris comme tu veux dedans, et a chaque fois que tu le modifies, tu fais un SetConsoleCursorPosition  au debut et un WriteConsole de ton buffer.
Cela dit c'est crados, car si tu modifies juste 1 caractere, tu copies quand meme tout (a moins que tu commences a optimiser, mais dans ce cas autant faire des WriteConsole sans passer par un buffer, ou encore plus simple des writeln ...)
Donc niveau proprete et performance c'est pas top, mais si tu debutes ce ser aplus simple que DirectX.
Tu te créé une fonction d'init qui créé et te renvoit le buffer, et une fonction genre Refresh que tu appeles apres chaque ecriture dans ton buffer.
Mais bon, autant pas se prendre la tete et rester en 16 bits.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°252857
El_gringo
Posté le 25-11-2002 à 12:26:14  profilanswer
 

antp a écrit a écrit :

Kylix = Delphi + C++Builder sous Linux
 
Bah oui le langage est moins répandu, mais je vois pas en quoi ça rend la technologie "fermée"
un soft fait avec VC++ et les MFC est pas nécessairement plus ouvert, à part que le MSC++ utilisé ressemble fort à du C++ :D
 
Mais y a quand même au moins un compilo libre qui supporte le langage de Delphi :
 
http://www.freepascal.org/




 
ha, ok. En fait kylix, c'est Borland aussi !?
 
Pour VC++, t de mauvaise fois. Si on veut faire du C/C++ standard avec, c'est possible. Après, 'faut avouer que c tentant d'utiliser les librairies fournies par MS...
 
Et dernier point... Un compilo libre... c déja ça !

n°252858
antp
Super Administrateur
Champion des excuses bidons
Posté le 25-11-2002 à 12:27:54  profilanswer
 

El_Gringo a écrit a écrit :

 
ha, ok. En fait kylix, c'est Borland aussi !?




 
ouaip, enfin là on part hors-sujet :o
 

El_Gringo a écrit a écrit :

 
Pour VC++, t de mauvaise fois. Si on veut faire du C/C++ standard avec, c'est possible. Après, 'faut avouer que c tentant d'utiliser les librairies fournies par MS...




 
J'ai pas dit le contraire, je voulais dire que si on utilise toutes les possibilités de VC++ ça n'a plus tellement à voir avec le standard, ne fût-ce que pour les librairies utilisées
C'est un peu pareil avec Delphi.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°252861
El_gringo
Posté le 25-11-2002 à 12:30:02  profilanswer
 

antp a écrit a écrit :

 
 
ouaip, enfin là on part hors-sujet :o
 
 
 
J'ai pas dit le contraire, je voulais dire que si on utilise toutes les possibilités de VC++ ça n'a plus tellement à voir avec le standard, ne fût-ce que pour les librairies utilisées
C'est un peu pareil avec Delphi.
 




 
Ok, bon, sur ce, arrêtons cet hors sujet. Désolé pour mon intrusion ds ce topic, et merci ...

n°252879
Bleuarff
pouet
Posté le 25-11-2002 à 12:57:11  profilanswer
 

el_gringo> ya pas de mal :D
 
helloworld> rester en 16 bit je peux pas: c pour un projet à l'ecole, où il faut utiliser obligatoirement VC++/win32 console app mais merci du tuyau :jap:


---------------
©2008 Bleuarff Corp.
n°253380
HelloWorld
Salut tout le monde!
Posté le 25-11-2002 à 19:54:10  profilanswer
 

ben alors la lib standard.
printf est là pour ca !


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°254712
Bleuarff
pouet
Posté le 26-11-2002 à 23:53:21  profilanswer
 

HelloWorld a écrit a écrit :

ben alors la lib standard.
printf est là pour ca !




 
tu a lu le topic ? c pas ecrire qui m'interesse mais lire [:seyar]


---------------
©2008 Bleuarff Corp.
n°254749
leirn
A.D.I.D.A.S.
Posté le 27-11-2002 à 01:33:56  profilanswer
 

malloc sert a allouer la memoire, mais suivant les os, le systeme ne verifie meme pas tjs que la memoire alloué (reservé) existe physikmeent sur la machine. et elle renvoi un adressage non absolu pour permettre au prog d'y acceder


---------------
"Je brandirai une épée d'orichalque, je m'assouvirai sur des Templiers." | "Avec dans son sillage l'Ombre du Diable, Leirn appelait les morts pour une danse macabre et déchainaît les horreurs de la nuit..."
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Acces direct mémoire

 

Sujets relatifs
Utilisation de javax.comm (accès au port série, //, ...) + DEPRECATELaTeX : recherche un site pour me rafraichir la memoire
Accès à Access avec PHPProbléme d'accés en écriture a une base de donnée sous Win Xp
Pb d'"allocation mémoire avec STL stringAccès port série avec Java
[C] Listes chainées et allocation mémoireAccéder à des prog (liste+infos) sur un AS400 via un accès FTP ???
Liste déroulante et accès OracleFuites mémoire avec QT
Plus de sujets relatifs à : Acces direct mémoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR