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
peek und poke????
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Was genau meinst Du denn damit? Ich kenne Peek & Poke noch vom Commodore Basic V2.0 vom C64~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?!
Und was bedeutet "tmp datei aus dem Speicher kopieren"?
@~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.
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Wobei das in BASIC V2.0 andersd aussehen müßte: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.
Code: Alles auswählen
poke 1024,65
print peek(1024)
BTW: Dieses Board kann kein Sytnax-Highlighting für BASIC V2.0?
@Hyperion: Ja das mit dem Syntax-Highlighting ist mir auch schon negativ aufgefallen. 6502/6510-Assembler fehlt auch.
da lachen ja die hühner bei deiner poke und peek-syntax..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.
das weiss ich sogar besser und das heisst schon was
und woher:
ich progge noch mit 2 atari800xl und usb-stick-laufwerk
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).~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!
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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Mit solchen Kommentaren machst Du Dir hier sicher viele Freundesechsrad hat geschrieben: da lachen ja die hühner bei deiner poke und peek-syntax..
das weiss ich sogar besser und das heisst schon was
Wie ich schon mutmaßte wollte BlackJack das vermutlich pythonisch darstellen! Im ürbigen: DIE Peek & Poke Implementation gibt es sicherlich nicht, gel!
Schön!und woher:
ich progge noch mit 2 atari800xl und usb-stick-laufwerk
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
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo ~Evil~!~Evil~ hat geschrieben:würde gern eine tmp datei aus dem speicher kopieren
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.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
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.
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.
- 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
Aber ich weiß, gerold mag leider keine Wikis
Btw. zum Thema schlechte phpBB Suche: http://www.python-forum.de/topic-14585.html