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

 C Discussion :

Acces a la memoire video en ecriture


Sujet :

C

  1. #1
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Par défaut Acces a la memoire video en ecriture
    bonjour,
    Voila j'ai un problème j'ai ecrit un code qui permet d'écrire dans la mémoire vidéo (adresse 0xB800 0000)une chaine de caractère , je l'ai déjà fait sous un vieux log qui ne nomme borland (un des premier ) je l'ai refait sous dev c++ et la surprise il compile et au moment de l'exe. il me plante avec le fameux message rapport d'erreur pouvez vous me dire ce qui merde ?

    Voici mon code : ( sachant que je veux qui fonctionne sous dev )

    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
    #include <conio.h>
    #include <windows.h>
    #define ECR ((short far*)0xB8000000) //Constante ECR avec l'@base mem video
    #define PutChar(X,Y,car) (*(ECR+80*Y+X)=car) //macro PutChar
    #define GetChar(X,Y) (*(ECR+80*Y+X)) //macro GetChar
     
    //Couleur de fond
    #define F_ROUGE 0x4000
    #define F_VERT 0x2000
    #define F_BLEU 0x1000
     
    //Couleur d'un caractŠre
    #define C_ROUGE 0x0400
    #define C_VERT 0x0200
    #define C_BLEU 0x0100
     
    //spécial
    #define CLIGNE 0x8000
    #define BRILLE 0x0800
     
    int main()
    {
      short toto,i=0;
      char tab[8]={"coucou"};
      while(i<8)
      {
       PutChar(8+i,13,tab[i]|(C_ROUGE|CLIGNE)); //afficher en 8,13
       toto=(GetChar(8+i,13));  //lire en 8,13
       PutChar(13+i,23,toto); //ecrire le contenu de 8,13 en 13,23
       i++;
      }
     
      //getch();
      system("pause");
    return 0;
    }

    merci
    over
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  2. #2
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    L'acces direct a la memoire video est interdit dans les OS modernes. Desormais, on communique avec le driver.

  3. #3
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Par défaut
    Dans ce cas comment se fait t'il au bahut sous Xp j'y arrive avec le premier borland ?
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Overcrash3181 Voir le message
    Dans ce cas comment se fait t'il au bahut sous Xp j'y arrive avec le premier borland ?
    Parce que XP supporte encore le mode 16-bit, et encore, ça dépend de la version. J'ai vu certaines choses fonctionner sous XP de base et ne plus fonctionner sous XP/SP1 ou XP/SP2...

    Sous Vista, il est clair que ça ne fonctionnera pas du tout.

  5. #5
    Expert confirmé
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Par défaut
    Citation Envoyé par Overcrash3181 Voir le message
    Dans ce cas comment se fait t'il au bahut sous Xp j'y arrive avec le premier borland ?
    Ce compilateur (borland) que tu as utilisé produit un exécutable (.exe) MS-DOS et non Windows, Dev-Cpp lui génère un exécutable (.exe) Windows. Les exécutables MS-DOS ne fonctionnent pas directement sous Windows XP, les deux systèmes étant différents. Ils peuvent cependant être émulés à l'aide d'une machine virtuelle. C'est ce qui se passe quand tu lances un exécutable MS-DOS sous Windows.

  6. #6
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Par défaut
    je viens d'apprendre par un de mes prof que on pouvait déverrouiller cette protection a l'aide d'une bibliothèque "direct I/O" pour pouvoir écrire sur cette adresse.

    Dans un premier temps j'aimerais utiliser cette bibliothèque mais ensuite j'aimerais si possible retranscrire le code pour a la final avoir que un .exe et qu'il soit transportable.

    voyez vous?

    alors avez vous des infos sur cette librairies ?

    Over
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  7. #7
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 473
    Par défaut
    Citation Envoyé par Overcrash3181 Voir le message
    bonjour, Voila j'ai un problème j'ai ecrit un code qui permet d'écrire dans la mémoire vidéo (adresse 0xB800 0000)une chaine de caractère , je l'ai déjà fait sous un vieux log qui ne nomme borland (un des premier ) je l'ai refait sous dev c++ et la surprise il compile et au moment de l'exe. il me plante avec le fameux message rapport d'erreur pouvez vous me dire ce qui merde ?
    Il faut que tu te renseignes sur ce qu'est le mode protégé : le système alloue des plages de mémoire aux différents processus et lorsqu'ils en sortent, c'est le micro-processeur lui-même qui interrompt le fautif en déclenchant une exception (les fameux segfaults).

    D'autre part, les segments ne fonctionnent plus du tout comme en mode réel (shift de 4 bits). À la place, la valeur qu'ils contiennent représente le numéro de la plage réservée.

    Enfin, il y a des chances que la mémoire vidéo elle-même ne se trouve plus à cet endroit. À l'époque des ordinateurs 8 et 16 bits, le matériel était encore suffisamment statique et rudimentaire pour que le constructeur lui-même lui alloue des plages fixes. Aujourd'hui, toutes les cartes vidéos fonctionnent différement (ne serait-ce que pour gagner en performance) et comme avec le bus PCI, tu peux brancher plusieurs cartes du même type, les plages de mémoire sont définies à l'initialisation de la carte.

    Si ton programme fonctionne encore sous XP, comme l'ont dit Melem et Emmanuel, c'est parce que le système émule le DOS en ré-établissant au mieux l'environnement de l'époque, et en rattrapant les exceptions du CPU pour aller reproduire lui-même l'effet escompté.

  8. #8
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 473
    Par défaut
    Citation Envoyé par Overcrash3181 Voir le message
    je viens d'apprendre par un de mes prof que on pouvait déverrouiller cette protection a l'aide d'une bibliothèque "direct I/O" pour pouvoir écrire sur cette adresse. Dans un premier temps j'aimerais utiliser cette bibliothèque mais ensuite j'aimerais si possible retranscrire le code pour a la final avoir que un .exe et qu'il soit transportable. voyez vous? alors avez vous des infos sur cette librairies ?
    N'utilise pas une bibliothèque pour contourner un problème sans le résoudre. Surtout pas si tu ne sais pas exactement ce qu'elle est censée faire !

    Si tu lèves les protections avec quelque chose d'aussi brutal, tu risques d'aller écrire à un endroit qui n'est plus du tout celui que tu crois et provoquer des catastrophes.

  9. #9
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Overcrash3181 Voir le message
    je viens d'apprendre par un de mes prof que on pouvait déverrouiller cette protection a l'aide d'une bibliothèque "direct I/O" pour pouvoir écrire sur cette adresse.
    Les I/O des x86 n'ont rien à voir avec la mémoire vidéo (pas du tout le même bus ni les mêmes instructions machines). Ca sert à accéder à des périphériques (contrôleurs d'IT, timers, uart etc.)

    A moins que ton métier soit 'programmeur de drivers' (si c'est le cas une sérieuse remise à niveau est à envisager), tu n'as pas à te préoccuper de la gestion directe du matériel. Le système est là pour ça (c'est très précisément un de ses rôles). Il fourni donc tout ce qu'il faut, comme Direct X (sous Windows), par exemple.



    Quel est ton but exact ?

  10. #10
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Par défaut
    je suis étudiant en seconde année d'info indus
    j'apprends beaucoup et je vous remercie

    mon but est très simple en théorie faire un programme qui écris sur la mémoire vidéo ( ça je sais le faire ) mais en plus j'aimerais qu'il s'exécute depuis windows xp sous la forme d'un .exe

    Pour répondre a Obsidian je ne souhaite pas utiliser cette bibli pour contourner mais pour l'analyser pour ensuite comprendre comment elle se démerde a déverrouiller cette plage de valeurs pour ensuite pouvoir écrire dessus.

    En clair je veux faire sauter() la protection de Xp ^^
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  11. #11
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Overcrash3181 Voir le message
    je suis étudiant en seconde année d'info indus
    j'apprends beaucoup et je vous remercie

    mon but est très simple en théorie faire un programme qui écris sur la mémoire vidéo ( ça je sais le faire ) mais en plus j'aimerais qu'il s'exécute depuis windows xp sous la forme d'un .exe
    C'est pas vraiment possible de manière directe, car le mode protégé du x86 (et ça ne dépend pas du système) est là justement pour éviter ça. Même en Ring0 (mode noyau), je ne suis même pas sûr que tu ais accès à la mémoire physique. Si c'est comme sous Linux, les adresses physiques ne sont pas accessibles directement. Il faut demander une adresse logique au gestionnaire de mémoire (MMU) via une fonction système dédiée du noyau (en gros, tu passes l'adresse physique en paramètre, et tu reçois l'adresse logique correspondante).
    Pour répondre a Obsidian je ne souhaite pas utiliser cette bibli pour contourner mais pour l'analyser pour ensuite comprendre comment elle se démerde a déverrouiller cette plage de valeurs pour ensuite pouvoir écrire dessus.
    Ce n'est ni de la magie ni une connaissance que l'on acquiert en fouillant le sol ou les poubelles. Il suffit de lire la doc technique qui va bien :
    • Fonctionnement du mode protégé en x86
    • Architecture des PC (MMU, notamment)
    • Programmation système (drivers, modules)

    Rien à 'découvrir', tout à apprendre...

    L'expérimentation sert a postériori pour vérifier ses connaissance, mais pas pour découvrir tel ou tel mécanisme. C'est beaucoup trop complexe (et de peu d'intérêt, à moins que du te destines à faire de la rétro-ingénierie, spécialité de certains pays que je préfère ne pas citer...)
    En clair je veux faire sauter la protection de Xp
    Installe MS-DOS...

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 473
    Par défaut
    Citation Envoyé par Overcrash3181 Voir le message
    mon but est très simple en théorie faire un programme qui écris sur la mémoire vidéo ( ça je sais le faire ) mais en plus j'aimerais qu'il s'exécute depuis windows xp sous la forme d'un .exe
    Non, désolé, mais tu ne sais plus le faire : la représentation que tu te fais d'un PC était exploitable jusqu'à DOS 6. Ce qui fonctionne dans une boîte DOS aujourd'hui ne le fait qu'au travers d'un émulateur.

    Il faut remettre tes connaissances à jour (et peut-être même celles de ton professeur si ce n'est pas sa branche exacte) car cette approche est obsolète et n'est plus applicable.

    elle se démerde a déverrouiller cette plage de valeurs pour ensuite pouvoir écrire dessus. En clair je veux faire sauter la protection de Xp ^^
    Elle ne « déverrouille » pas une plage de valeur. Cette plage n'existe plus en tant que telle. La mémoire de la carte vidéo doit être mappée dans l'espace adressable du micro-processeur. Comme te l'a expliqué Emmanuel, si ton objectif est d'apprendre à piloter des périphériques, tu peux t'y investir (mais prévois plusieurs mois), si tu cherches simplement à revenir à l'état antérieur parce que tu estimes que ce sera plus simple que de réécrire ton code, tu vas droit dans le mur.

    De plus, à en voir ton code, il semblerait que ton objectif soit l'utilisation du mode texte. S'il pourrait encore fonctionner, dans le principe, en plein écran, tu te doutes bien qu'une boîte DOS inscrite au sein d'un bureau graphique est émulée.

  13. #13
    Modérateur
    Avatar de Overcrash
    Homme Profil pro
    Architecte Logiciel et responsable CRM (Salesforce)
    Inscrit en
    Mai 2008
    Messages
    1 254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Architecte Logiciel et responsable CRM (Salesforce)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 254
    Par défaut
    merci pour vos réponses

    Ce n'était pas le but de mon prof ^^ mais je voulais trouver ou apprendre un moyen.

    Je suis encore débutant donc je ne mets pas mes connaissance a jour mais je les apprend

    En tout cas après en avoir parler a plusieurs prof il me disent tous qu'il faut programmer un driver (un de mes prof ma proposer de me faire faire un driver) mais je crois que j'en ai pas encore le niveau donc pour l'instant je vais retourner a mes cours et a me prendre la tête avec les architectures de Intel et Freescale (ex-Motorola).

    Je continuerais a faire tourner mes programmes sous DOS ^^

    Merci encore à vous .

    P.S. : Obsidian, tu es a Evry ? Deux de mes profs enseignent là-bas et vivent pas loin. Si ça ce trouve tu es mon prof. ^^
    ---
    Overcrash

    Je ne lis pas les codes qui ne sont pas indentés.
    Merci de les messages utiles en cliquant en bas à droite du message

    Bloqué par le firewall pour accéder au chat ? Essayez avec l'adresse en direct : http://87.98.168.209/

  14. #14
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 473
    Par défaut
    En tout cas après en avoir parler a plusieurs prof il me disent tous qu'il faut programmer un driver (un de mes prof ma proposer de me faire faire un driver) mais je crois que j'en ai pas encore le niveau donc pour l'instant je vais retourner a mes cours et a me prendre la tête avec les architectures de Intel et Freescale (ex-Motorola).
    C'est costaud, la programmation d'un pilote. Mais tout dépend de quel pilote. Si c'est celui de ta carte vidéo 3D, oublie pour le moment, mais si c'est celui de ton imprimante, tu peux très bien faire un programme en user-space qui fonctionnera tout aussi bien et qui ne risquera pas de mettre le système entier par terre en cas de plantage.

    Je continuerais a faire tourner mes programmes sous DOS ^^
    Le DOS, c'est sympa parce que ça permet de bidouiller. On peut triturer sa machine, prendre le contrôle des interruptions et faire des tours de magie en assembleur (on se marrait bien, à l'époque). Par contre, si tu n'as pas l'intention de descendre en dessous du C, autant exploiter les systèmes récents. Tu acquériras des connaissances modernes, valables sur le marché, et l'entendue des API disponibles est beaucoup plus vaste.

    Merci encore à vous . P.S. : Obsidian, tu es a Evry ? Deux de mes profs enseignent là-bas et vivent pas loin. Si ça ce trouve tu es mon prof. ^^
    Je n'enseigne pas (à mon grand regret, d'ailleurs), donc je ne suis probablement pas ton prof :-) Mais il n'est pas impossible que tu m'aies vu parler de C, indirectement ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. acces a la memoire video
    Par duplo dans le forum Windows
    Réponses: 4
    Dernier message: 09/08/2007, 20h08
  2. Acces memoire video
    Par Mercenary Developer dans le forum C
    Réponses: 8
    Dernier message: 22/06/2007, 02h27
  3. calculer la memoire video disponible et le fps
    Par gaut dans le forum DirectX
    Réponses: 1
    Dernier message: 28/09/2006, 03h00
  4. Acces a la memoire cache L2
    Par yoloosis dans le forum C++
    Réponses: 12
    Dernier message: 12/07/2006, 22h43
  5. récupération de la taille de la memoire video!!
    Par fatmamed dans le forum C++
    Réponses: 1
    Dernier message: 21/01/2006, 09h50

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