muistin lukeminen

hei
miten luen C-ohjelmassa esim. muistipaikan
0x20 sisällön eli ohjelman osoiteavaruuden
ulkopuolelta?

Kiitos neuvoista,
Linux-käyttäjä
2381
Äänestä

Muut lukivat myös

Vastaukset 2

Vanhimmat

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?

Äänestä

Kommentoi aloitusta


Linux-käyttäjä kirjoitti:

hei
miten luen C-ohjelmassa esim. muistipaikan
0x20 sisällön eli ohjelman osoiteavaruuden
ulkopuolelta?

Kiitos neuvoista,
Linux-käyttäjä

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu