hei
miten luen C-ohjelmassa esim. muistipaikan
0x20 sisällön eli ohjelman osoiteavaruuden
ulkopuolelta?
Kiitos neuvoista,
Linux-käyttäjä
muistin lukeminen
2
347
Vastaukset
- Sen tiedon tuo
Voit muuttaa kokonaisluvun 0x20 osoittimeksi ja sitten hakea osoittimen tiedon (dereference a pointer). Jos haet sopimattomasta osoitteesta, voi tulla segmentation fault. On ihan omalla vastuullasi, että osoitteessa on jotakin järkevää ja sen saa sieltä katsoa. Varmasti tunnet Linuxisi.
Jos haluat int-tyyppisen tiedon, teet näin. Kommenttia edeltävät osat ovat esittelyjä, joten ne pitää laittaa funktion tai muun blokin alkuun C-kielen sääntöjen mukaisesti.
int osoite = 0x20;
int tieto = 0;
int* ptr = (int*) osoite;
/* ja nyt luetaan & sijoitetaan tieto-muuttujaan */
tieto = *ptr;
Tämä on neljä tai kahdeksan tavua, riippuen prossusta.
Yksi tavu tulisi näin:
int osoite = 0x20;
chat tieto = 0;
char* ptr = (char*) osoite;
/* ja nyt luetaan & sijoitetaan tieto-muuttujaan */
tieto = *ptr;
Jos haluat olla tarkka, pitää osoitteet tallentaa size_t -tyyppiseen muuttujaan. size_t määritellään jossakin standardiotsikkotiedostossa. Varmaankin stdlib.h:ssa?- hemmoit
Sulautettuissa kääntäjissä käytetään tälläistä temppua:
#define OSOITE ((int *)0x20)
käyttö esim:
OSOITE = 40;
muutuja = OSOITE;
Jos kyseessä on x86, tuo 0x20 on ilmeisesti io-avaruudessa ?
http://www.faqs.org/docs/Linux-mini/IO-Port-Programming.html#s2
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- 1077793
Siekkilässä ajettu ihmisten yli- mitä tapahtui? Länsi-Savo ei ole uutisoinut asiata
Manneja, vaiko matuja?1146098- 835207
- 1414563
Alavuden sairaala
Säästääkö Alavuden sairaala sähkössä. Kävin Sunnuntaina vast. otolla. Odotushuone ja käytävä jolla lääkäri otti vastaan113240- 623034
- 582948
Törkeää toimintaa
Todella törkeitä kaheleita niitä on Ylivieskassakin. https://www.ess.fi/uutissuomalainen/8570818102464- 612447
Hei........
Pelkkä sun näkeminen saa mut hymyilemään pitkin iltaa. Oot niin 🤩😘 Edellinen poistettiin.562076