peek und poke????

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
~Evil~
User
Beiträge: 13
Registriert: Dienstag 6. Mai 2008, 20:29

moin mal ne frage,
hab schon das forum durchsucht aber nichts gefunden....
peek und poke gibts sowas ähnliches auch in python würde gern eine tmp datei aus dem speicher kopieren, weiß nicht wie das geht?!

MfG Evil
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

~Evil~ hat geschrieben: peek und poke gibts sowas ähnliches auch in python würde gern eine tmp datei aus dem speicher kopieren, weiß nicht wie das geht?!
Was genau meinst Du denn damit? Ich kenne Peek & Poke noch vom Commodore Basic V2.0 vom C64 ;)
Und was bedeutet "tmp datei aus dem Speicher kopieren"?
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Da hier wahrscheinlich keiner weiss was du meinst: Versuchs nochmal, am besten mit einem Beispiel.

Tmp datei aus dem Speicher kopieren ???
Peek?
Poke?
BlackJack

@~Evil~: Falls damit die BASIC-Befehle gemeint sind, die man zum Beispiel vom C64 her kennt, würde mich auch interessieren wozu die benötigt werden.

Auf modernen Betriebsystemen hat jedes Programm seinen eigenen Adressraum, also könntest Du sowieso nur auf den Speicher des Programms zugreifen, in dem Du `peek()` und `poke()` verwendest. Also stellt sich die Frage worauf Du in einem Python-Programm zugreifen möchtest, an das man auf offiziellem Wege nicht auch einfacher und sicherer heran kommt!?

Für alle Unwissenden: ``peek(address)`` liefert das Byte an der angegebenen Adresse und ``poke(address, value)`` schreibt den Bytewert `value` and die angegebene Adresse.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

BlackJack hat geschrieben: Für alle Unwissenden: ``peek(address)`` liefert das Byte an der angegebenen Adresse und ``poke(address, value)`` schreibt den Bytewert `value` and die angegebene Adresse.
Wobei das in BASIC V2.0 andersd aussehen müßte:

Code: Alles auswählen

poke 1024,65
print peek(1024)
Poke ist also ein Kommando, Peek eine Funktion. Aber ok, wird in anderen Basic-Dialekten vermutlich anders aussehen, oder Blacki wollte eine mögliche pythonische Art einführen ;-)

BTW: Dieses Board kann kein Sytnax-Highlighting für BASIC V2.0? :-D
BlackJack

@Hyperion: Ja das mit dem Syntax-Highlighting ist mir auch schon negativ aufgefallen. 6502/6510-Assembler fehlt auch. ;-)
~Evil~
User
Beiträge: 13
Registriert: Dienstag 6. Mai 2008, 20:29

es gib ein programm namens - Unlocker - und mit dem kann man z.b. temporäre dateien "unlocken" und soweit ich weiß zieht das programm die dateien ausm speicher!

und ich wollte sowas gerne mit python versuchen...

THX

Evil
sechsrad
User
Beiträge: 173
Registriert: Montag 31. März 2008, 17:09

Für alle Unwissenden: ``peek(address)`` liefert das Byte an der angegebenen Adresse und ``poke(address, value)`` schreibt den Bytewert `value` and die angegebene Adresse.
da lachen ja die hühner bei deiner poke und peek-syntax.. :D
das weiss ich sogar besser und das heisst schon was :?


und woher:
ich progge noch mit 2 atari800xl und usb-stick-laufwerk :lol:
~Evil~
User
Beiträge: 13
Registriert: Dienstag 6. Mai 2008, 20:29

meine frage war ob es sowas ähnliches gibt?!
lunar

~Evil~ hat geschrieben:es gib ein programm namens - Unlocker - und mit dem kann man z.b. temporäre dateien "unlocken" und soweit ich weiß zieht das programm die dateien ausm speicher!
Das ``Unlocker'`-Programm, welches ich per Google gefunden habe, macht nichts anderes, als die Win-API Locks für geöffnete Dateien zu entfernen. Dafür benötigt man aber weder direkten Speicherzugriff noch irgendwelche wahnsinnigen PeekPoke-Sachen, dafür muss man nur die richtigen Win-API Funktionen aufrufen (die ich dir als Linux-User allerdings nicht sagen kann).

Direkter Zugriff auf den Speicher anderer Anwendungen oder gar den des Systems funktioniert eh auf keinem modernen Betriebssystem, weil die virtuellen Speicher nutzen, um Prozesse voneinander zu isolieren. Deswegen siehst du unter XP auch nicht gleich den BSoD, weil ein Programm abschmiert. Das aber hat Blackjack dir schon gesagt.

Ich habe das Gefühl, dass du keine Ahnung hast, was du da tun willst. Als gut gemeinten Tipp gebe ich dir deswegen mit, dich erstmal mit Grundlagen zu befassen, bevor du dich an sowas ranwagst.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

sechsrad hat geschrieben: da lachen ja die hühner bei deiner poke und peek-syntax.. :D
das weiss ich sogar besser und das heisst schon was :?
Mit solchen Kommentaren machst Du Dir hier sicher viele Freunde ;-)
Wie ich schon mutmaßte wollte BlackJack das vermutlich pythonisch darstellen! Im ürbigen: DIE Peek & Poke Implementation gibt es sicherlich nicht, gel!
und woher:
ich progge noch mit 2 atari800xl und usb-stick-laufwerk :lol:
Schön!
lunar

@Hyperion
Warum fütterst du ihn denn auch noch?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

lunar hat geschrieben:Warum fütterst du ihn denn auch noch?
Ich mach es zum Beispiel, weil ich sonst keine Haustiere habe ;-)
BlackJack

Nur damit niemand auf die Idee kommt CBM BASIC V2 sei mächtiger als Python (ungetestet):

Code: Alles auswählen

from ctypes import c_ubyte, POINTER

c_ubyte_p = POINTER(c_ubyte)

def peek(address):
    return c_ubyte_p.from_address(address).contents.value

def poke(address, value):
    c_ubyte_p.from_address(address).contents.value = value
:-)
lunar

Na toll, jetzt hast du ihn auf dumme Gedanken gebracht ... ^^
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

~Evil~ hat geschrieben:würde gern eine tmp datei aus dem speicher kopieren
Hallo ~Evil~!

Ich glaube nicht, dass du das brauchen kannst, da es eine Kooperation mit dem anderen Programm erfordert.

Ich hatte mich vor Kurzem mal mit dem Modul *mmap* http://docs.python.org/lib/module-mmap.html befasst. Damit kann man unter *Windows*, einem Speicherbereich einen "Namen" geben, diesen beschreiben und auslesen. Das funktioniert seit Python 2.5. Auf diesen Speicherbereich können mehrere Programme parallel zugreifen. In Verbindung mit systemweiten Events/Locks kann man damit einen sehr schnellen Datenaustausch zwischen Programmen (da nur im Speicher) realisieren. Das ist aber keine einfache Sache. Da ich keinen Bedarf dafür hatte, habe ich mich nicht näher damit befasst. Ein paar kleine Tests und das war's auch schon.

Dann gibt es noch die Windows-Funktion *CopyMemory* http://msdn.microsoft.com/en-us/library/aa366535.aspx

In wie weit der Speicherschutz gilt weiß ich nicht. Das Schreiben in einen Speicherbereich eines anderen Programmes funktioniert ziemlich sicher nicht. Aber ob es möglich ist, aus dem Speicher eines anderen Programmes zu lesen? Ich weiß es nicht mehr.

Auf die Funktion CopyMemory sollte man über *ctypes* zugreifen können. CopyMemory kommt aus der *kernel32.dll*. Visual Basic Beispiel: http://paste.pocoo.org/show/48513/

Die Schwierigkeit dürfte in deinem Fall eher sein, die Adresse des Speicherbereichs heraus zu finden.

Und BlackJacks Code sollte man auch mal ausprobieren. Vielleicht stellt das einen pythonischen Ersatz für die API-Funktion CopyMemory dar. Mit ctypes kenne ich mich leider noch nicht aus.

mfg
Gerold
:-)

PS:
- http://msdn.microsoft.com/en-us/library ... S.85).aspx (die Klammern gehören dazu)
- http://msdn.microsoft.com/en-us/library ... S.85).aspx (die Klammern gehören dazu)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
lunar

Wie immer wieder ein sehr ausführliches Posting von dir zum Thema "direkter Speicherzugriff"... nur glaube ich nicht, dass der OP *wirklich* direkten Speicherzugriff braucht. Für dieses "Unlocker"-Zeugs braucht man es jedenfalls nicht.
BlackJack

Aber es passt zum Titel und zur formulierten Fragestellung, auch wenn's letztendlich für den OP die falsche Frage war. So finden Leute, die *wirklich* ``peek`` und ``poke`` suchen, wenigstens erhellende Informationen. :-)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Auf der anderen Seite ist es IMHO Sinnvoller, solche Ausführlichen Informationen ehr ins Wiki zu schreiben und dann hier zu verlinken. Dieser Thread wird untergehen und ist nur durch die schlechte phpBB Suche wieder zu finden...

Aber ich weiß, gerold mag leider keine Wikis :(

Btw. zum Thema schlechte phpBB Suche: http://www.python-forum.de/topic-14585.html

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

jens hat geschrieben:Aber ich weiß, gerold mag leider keine Wikis :(
Hindert ja dich nicht, es ins Wiki zu schreiben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten