Seite 1 von 2

peek und poke????

Verfasst: Dienstag 6. Mai 2008, 20:38
von ~Evil~
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

Re: peek und poke????

Verfasst: Dienstag 6. Mai 2008, 21:23
von Hyperion
~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"?

Verfasst: Dienstag 6. Mai 2008, 22:18
von Mad-Marty
Da hier wahrscheinlich keiner weiss was du meinst: Versuchs nochmal, am besten mit einem Beispiel.

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

Verfasst: Mittwoch 7. Mai 2008, 07:23
von 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.

Verfasst: Mittwoch 7. Mai 2008, 07:58
von Hyperion
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

Verfasst: Mittwoch 7. Mai 2008, 08:21
von BlackJack
@Hyperion: Ja das mit dem Syntax-Highlighting ist mir auch schon negativ aufgefallen. 6502/6510-Assembler fehlt auch. ;-)

Verfasst: Mittwoch 7. Mai 2008, 17:02
von ~Evil~
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

Verfasst: Mittwoch 7. Mai 2008, 18:01
von sechsrad
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:

Verfasst: Mittwoch 7. Mai 2008, 18:09
von ~Evil~
meine frage war ob es sowas ähnliches gibt?!

Verfasst: Mittwoch 7. Mai 2008, 19:35
von 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.

Verfasst: Mittwoch 7. Mai 2008, 20:09
von Hyperion
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!

Verfasst: Mittwoch 7. Mai 2008, 20:21
von lunar
@Hyperion
Warum fütterst du ihn denn auch noch?

Verfasst: Mittwoch 7. Mai 2008, 20:26
von EyDu
lunar hat geschrieben:Warum fütterst du ihn denn auch noch?
Ich mach es zum Beispiel, weil ich sonst keine Haustiere habe ;-)

Verfasst: Mittwoch 7. Mai 2008, 20:33
von 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
:-)

Verfasst: Mittwoch 7. Mai 2008, 21:01
von lunar
Na toll, jetzt hast du ihn auf dumme Gedanken gebracht ... ^^

Re: peek und poke????

Verfasst: Mittwoch 7. Mai 2008, 22:58
von gerold
~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)

Verfasst: Donnerstag 8. Mai 2008, 06:33
von 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.

Verfasst: Donnerstag 8. Mai 2008, 07:18
von 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. :-)

Verfasst: Donnerstag 8. Mai 2008, 08:34
von jens
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

Verfasst: Donnerstag 8. Mai 2008, 15:08
von Leonidas
jens hat geschrieben:Aber ich weiß, gerold mag leider keine Wikis :(
Hindert ja dich nicht, es ins Wiki zu schreiben.