Forcer un pointeur

Signaler
Messages postés
93
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
26 septembre 2006
-
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
-
Comment fait-on pour forcer un pointeur à pointer sur une adresse précise?
g : char *ptr 0x03fd; > génére une erreur

Comment faire pour lire l'octet à cette adrese?

Lamalice83

9 réponses

Messages postés
241
Date d'inscription
mardi 29 octobre 2002
Statut
Membre
Dernière intervention
23 janvier 2006

pourquoi pas tout simplement :

char *ptr;

ptr = 0x12345678;

Ca marche tres bien mais je crois qu une grsoose erreur se cache la dessous. Il ne faut JAMAIS affecter a un pointeur une adresse arbitraire car elle risque (99.9% de chances meme) de ne pas etre allouee a ton programme ( du moins sur un OS "recent", comme tous les UNIX, Linux ou Windows). Et meme si ton programme est en console sous windows, il plantera lamentablement (sous UNIX c est le bien connu "Segmentation fault"). Cela tient au fonctionnement de la memoire virtuelle sur x86 C est un peu long a expliquer mais si ca t interesse n hesite pas a te renseigner dessus.

Enfin bref sauf si tu sais vraiment ce que tu fais (par ex partir d une adresse connue d une zone memoire et incrementer le pointeur), ca ne marchera pas. Personnellement je n ai jamais affecte une valeur a un pointeur directement comme ca.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
T'es sure que ca existe ca 0x03fd ???
Moi pas en tout cas!

Shell
Messages postés
627
Date d'inscription
mercredi 16 juin 2004
Statut
Membre
Dernière intervention
24 juillet 2011

Oui, MetalDwarf a raison, fo pas assigner direct un pointeur sur uen adresse mémoire, les cpu n'aiment pas ça :-)) ...mnt si tu as besoin de tout ça pour mettre des infos à un emplacement précis de mémoire, utilise memset() ;-)) je crois pas qu'il y ai la un probleme :)

Genda67, à votre service !
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
memset provoquera aussi une erreur si la mémoire n'est pas allouée/adressable.
Messages postés
93
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
26 septembre 2006

L'adresse 0x03fd représente l'adresse de l'octet Line Status Register du port COM1. Dans cet octet il y a un bit qui m'intéresse ( le TRSE ) qui indique que le dernier octet dans le buffer de sortie du port COM est parti. C'est le seul moyen pour contrôler la fin de l'envoi d'une trame. L'essaye donc de récupérer cet octet, sans succés pour le moment...

Lamalice83
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
sizeof(void *)

on parle bien de programmation sous dos ? de mode reel ?

sinon pas possible, d'ailleur ton adresse est bien sur 16bits
Messages postés
351
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
12 août 2009

Il doit bien exister une fonction qui donne l'adresse du port COM1 ?!
En utilisant comme cela une adresse en 'dur' tu ne pourras pas, me semble-t-il utiliser ton prog sur une autre machine que celle ou tu développe.

A+
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
c'est surtout que ca marche pas en mode protegé, on accede plus directement au materiel, tous passe (heureusement) par des drivers
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Pour accéder directement à n'importe quelle adresse (ou zone) mémoire sous Windows, il faut utiliser une librairie du genre WinIo:
http://www.internals.com
http://www.internals.com/utilities/winio.zip