Forcer un pointeur

cs_lamalice83 Messages postés 93 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 26 septembre 2006 - 14 oct. 2004 à 16:46
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 - 15 oct. 2004 à 12:56
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

MetalDwarf Messages postés 241 Date d'inscription mardi 29 octobre 2002 Statut Membre Dernière intervention 23 janvier 2006
14 oct. 2004 à 17:13
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.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
14 oct. 2004 à 17:28
T'es sure que ca existe ca 0x03fd ???
Moi pas en tout cas!

Shell
0
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
14 oct. 2004 à 22:32
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 !
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
15 oct. 2004 à 03:04
Salut,
memset provoquera aussi une erreur si la mémoire n'est pas allouée/adressable.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lamalice83 Messages postés 93 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 26 septembre 2006
15 oct. 2004 à 08:28
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
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 oct. 2004 à 11:13
sizeof(void *)

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

sinon pas possible, d'ailleur ton adresse est bien sur 16bits
0
cs_thierry la fronde Messages postés 351 Date d'inscription mercredi 21 juillet 2004 Statut Membre Dernière intervention 12 août 2009
15 oct. 2004 à 11:45
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+
0
cs_djl Messages postés 3011 Date d'inscription jeudi 26 septembre 2002 Statut Membre Dernière intervention 27 novembre 2004 7
15 oct. 2004 à 12:05
c'est surtout que ca marche pas en mode protegé, on accede plus directement au materiel, tous passe (heureusement) par des drivers
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
15 oct. 2004 à 12:56
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
0
Rejoignez-nous