Anzeige:
Ergebnis 1 bis 13 von 13

Thema: C/C++ Ram

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.10.2003
    Ort
    Köln
    Beiträge
    23

    Question C/C++ Ram

    Hallo,

    ich bin neu hier, wurde von www.linuxforen.de hier her geschickt

    Zur Frage:


    ich wollte fragen, wie man mit C direkt aus dem Ram lesen kann oder direkt reinschreiben kann?

    danke im vorraus.

    KDSBest

  2. #2
    Registrierter Benutzer
    Registriert seit
    08.07.2002
    Beiträge
    719
    Was meinst du denn mit "direkt"?

  3. #3
    Registrierter Benutzer
    Registriert seit
    20.07.2003
    Beiträge
    147
    ja. das geht.

    du schnappst dir mit malloc ein stueckchen vom Speicher in dem du dann nach belieben lesen und schreiben kannst.

    mfg

    c.

  4. #4
    Registrierter Benutzer
    Registriert seit
    22.10.2003
    Ort
    Köln
    Beiträge
    23
    Im Arbeitsspeicher will ich alle daten auslesen können.
    Also den Inhalt der ganzen speicher addressen, wenn es geht, würde ich die auch modifizieren können, dass wäre ganz gut.

    Danke im vorraus.

    KDSBest

  5. #5
    Registrierter Benutzer
    Registriert seit
    28.08.2002
    Beiträge
    496
    du bewegst dich da schon auf recht dünnem eis...
    wenn du was falsches erwischt schmiert im günstigsten fall dein programm ab, oder dein ganzes system...

    du kannst schon mit malloc einen 1 byte bereich vom typ char hohlen, und dann den pointer der darauf zeigt woanders hinzeigen lassen alla *(pointer+10)

    aber ich kann dir davon nur ABRATEN!

    greetz

  6. #6
    Registrierter Benutzer
    Registriert seit
    22.10.2003
    Ort
    Köln
    Beiträge
    23
    Kannst du mir einen kurzes beispiel hier hin schreiben, verstehe nicht genau wie du das meinst?

    Danke im vorraus.

    KDSBest

  7. #7
    Registrierter Benutzer
    Registriert seit
    22.10.2003
    Ort
    Köln
    Beiträge
    23
    Meinst du das ungefair so:

    #include <stdio.h>

    int x;
    int main()
    {
    char *a;
    for (x=10;x<81;x++)
    {
    *a= *(a+x);
    printf("Adresse a=%p, Wert a=%d\n",&a,*a);
    }
    return 0;
    }

    danke im vorraus.

    KDSBest

  8. #8
    Registrierter Benutzer
    Registriert seit
    22.10.2003
    Ort
    Köln
    Beiträge
    23
    Ich meine so sry, kleiner fehler!

    #include <stdio.h>

    int x;
    int main()
    {
    int *a;
    for (x=10;x<0xffffffff;x++)
    {
    *a= *(a+x);
    printf("Adresse a=%p, Wert a=%d\n",&a,*a);
    }
    return 0;
    }

  9. #9
    Registrierter Benutzer
    Registriert seit
    16.09.2001
    Beiträge
    1.182

    Nöö....

    Soweit ich weiß geht das nur bei Prozessoren < 386 oder Betriebsystemen die sich nicht um memory-management kümmern (DOS).
    Soweit ich weiß (nicht 100%ig), kontrolliert der Prozessor ob sich der Prozess in einem gültigen Speichernereich bewegt, und teilt es dem OS mit, wenn nicht -> Prozess wirk gekillt.
    Geändert von Lin728 (19-08-2017 um 18:31 Uhr)

  10. #10
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    ju,

    das darf doch ein Prozess gar nicht können. Sonst könntest ja _jeder_ (auch remote) user _jeden_ Prozess (z.B. gpg) beliebig überwachen.

    Und das möchte ich nicht. (Du vielleicht schon ) - aber das wird eben von der CPU verhindert. (im Protected Mode, in dem die Betriebssysteme (auser DOS) fahren auf jeden fall)

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  11. #11
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Als Root kannst zu zumindest von /proc/kcore lesen.

    In einem Kernelmodul kann man alles, aber ist die Frage wozu?

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  12. #12
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Heutige Prozessoren ab 386er enthalten eine Memory-Management-Unit. Dabei handelt es sich um eine Hardware-Unterstützung, welche moderne Betriebsysteme nutzen können um das Beschreiben von gegenseitigem Speicherbereichen zu verhindern. Der Speicher wird hierbei in sogenannten Segmenten (typisch 4kByte) an ein Programm zugewiesen. Bei jedem Speicherzugriff testet die Hardware, ob das Programm auf die entspechende Addresse zugreiffen darf und ruft bei Verstössen eine Interrupt-Routine des Betriebsystem auf. Im Normalfall beendet das Betriebsystem Programme die auf einen Speicherbereich zugreiffen wollen, welcher nicht dem Programm gehört.

    Wenn du unter Linux auf einen beliebigen Speicherbereich zugreiffen willst, dann muss die Anwendung mit root-Rechten laufen und auf spezielle Funktionen zugreiffen. Ev. ist dafür sogar ein Kernelmodul notwendig. Ich habe so eine Funktion noch nie benötigt, kann dir also nicht genau sagen wie das mit Linux im speziellen funktioniert.

    Gruss, Andy

  13. #13
    Registrierter Benutzer
    Registriert seit
    08.11.2002
    Ort
    Hennef
    Beiträge
    106
    hallo,

    wie wär's den mit
    man mem

    gruß

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •