Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Gameshark, Pointer

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 29.07.2006, 20:50    Titel: Gameshark, Pointer Antworten mit Zitat

hallo!

Ich würde gerne einen Art Gameshark bauen. Ich sehe das als hesausforderung schaffe es aber einfach nciht auf die Variablen in einem anderen Programm zu zugreifen. Kann mir Jemand helfen?

PS: Ich meine, z.B: Ichs tarte programm A mit variable B und will von Programm C aus diese Variable B editieren!
_________________
Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>


Zitat:
Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler.
by DJ. Peters
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
raph ael



Anmeldungsdatum: 12.04.2006
Beiträge: 472

BeitragVerfasst am: 29.07.2006, 21:08    Titel: Antworten mit Zitat

Die Programme können ja via WinSock kommunizieren.
Beispiel:

OK, das war ein blödes Beispiel.
Nächster Versuch:

Ein Programm fungiert als Server.
Das wird ein seperates Programm sein, dass die Nachrichten weiterleitet.

Die anderen Programme fungieren als Client.
Sie senden die Nachrichten.

Also nehmen wir einmal an, du hättest Programm A, dass die Variable xy auf 312 setzen möchte, dies allerdings den Programm B auch sagen möchte.
Also schickt es eine Anfrage an den Server.
Diese könnte z.B. so aussehen:
Code:

xy=312

Der Server hat jetzt die Aufgabe, diese Nachricht an alle Clients weiterzuleiten.
Diese wiederrum führen die Anfrage aus und senden eine Bestätigung, z.B.:
Code:

OK

Wenn der Server dieses "OK" von allen Clients empfängt, weiß er das alles OK ist.

Um den Code musst du dich leider selber kümmern durchgeknallt .
_________________
Zitat:
1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 30.07.2006, 11:03    Titel: Antworten mit Zitat

Entweder do stichst blind links mit Pointern um dich herum zwinkern und oder du stockerst über die WinAPI mit Pointern rum.
Um dir eine Grundlage zu geben: http://de.wikibooks.org/wiki/FreeBasic:_Zwischenablage
Ist zwar für die Zwischenablage, aber die einige Befehle der WinAPI könnten auch für deine Zwecken passen.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 30.07.2006, 16:44    Titel: Antworten mit Zitat

*Pointer-Nadel in Lanzenlänge schnell versteck* öhm... Eigentlich wollte ich das schon über die WinAPI regeln *pfeiff*, köntne man das nciht direkt mit den Pointern machen? Mir ist nur eines dabei aufgefallen: Ein Pointer in einem programm gleich einem andern. So hat die screen 12 in programm a die adresse 1002... und in B auch! Wieso zum Teufel ist das so??
_________________
Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>


Zitat:
Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler.
by DJ. Peters
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 30.07.2006, 19:03    Titel: Antworten mit Zitat

psygate hat Folgendes geschrieben:
*Pointer-Nadel in Lanzenlänge schnell versteck* öhm... Eigentlich wollte ich das schon über die WinAPI regeln *pfeiff*, köntne man das nciht direkt mit den Pointern machen? Mir ist nur eines dabei aufgefallen: Ein Pointer in einem programm gleich einem andern. So hat die screen 12 in programm a die adresse 1002... und in B auch! Wieso zum Teufel ist das so??

verwundert
Wie bist du an den Pointer vom Screen gekommen?


Ich glaube, die Pointer in Freebasic sind relativ.
Das heisst: Im RAM liegt dein Programm auf irgendeiner Adresse und Freebasic rechnet immer von da aus weiter.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
OdinX



Anmeldungsdatum: 29.07.2005
Beiträge: 253
Wohnort: SG Schweiz

BeitragVerfasst am: 30.07.2006, 22:37    Titel: Antworten mit Zitat

wie wärs wenn du den variableninhalt in eine text-datei speicherst? dann kann jedes andere programm diese wieder auslesen.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 30.07.2006, 23:16    Titel: Antworten mit Zitat

@OdinX: Das ist eine Idee... die hat nur einen Hacken! Nehmen wir mal das Spiel civilization (großer fan davon bin!). Ich möchte nun meine Schatzkammer und Credits etwas aufpolieren. Civilization wird mir wohl nichts in einer TextDatei Speichern durchgeknallt
_________________
Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>


Zitat:
Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler.
by DJ. Peters
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 31.07.2006, 08:19    Titel: Antworten mit Zitat

psygate hat Folgendes geschrieben:
@OdinX: Das ist eine Idee... die hat nur einen Hacken! Nehmen wir mal das Spiel civilization (großer fan davon bin!). Ich möchte nun meine Schatzkammer und Credits etwas aufpolieren. Civilization wird mir wohl nichts in einer TextDatei Speichern durchgeknallt

Kannst ja denn Spielstand öffnen und bearbeiten zwinkern .
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 31.07.2006, 12:01    Titel: Antworten mit Zitat

Es geht mir aber gerade um den Zugriff aufden RAM, natürlich könnte ich das saavegame auslesen und bearbeiten, aber das ist doch etwas langweilig oder?
_________________
Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>


Zitat:
Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler.
by DJ. Peters
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 31.07.2006, 12:56    Titel: Antworten mit Zitat

Anderer netter Ansatz:
Das Spiel deasemblieren und alle Objekte Kostenlos machen grinsen .

Das im RAM arbeiten kannst du auch versuchen, aber es ist halt ziemlihc Trickreich und es gibt viele Unbekannte.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
raph ael



Anmeldungsdatum: 12.04.2006
Beiträge: 472

BeitragVerfasst am: 31.07.2006, 13:05    Titel: Antworten mit Zitat

*Netwidedisassemblerhernehm*
Naja, wenn es dir mit den Savegame zu laaaangweilig ist mit den Augen rollen ...
Beim RAM weißt du ja nicht wo was ist, und wenn du's herausfindest, müsstest du es nach jeden Start neu berechnen verwundert .
Das mit den Savegames geht doch viiiiiiel leichter lächeln .
_________________
Zitat:
1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 31.07.2006, 13:08    Titel: Antworten mit Zitat

Ja, aber da muss es einen Weg geben! Wie sonst könnten die Trainer für Spiele funktionieren?!

Ich seh das mal als meine Herausforderung an die Community hier. durchgeknallt
_________________
Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>


Zitat:
Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler.
by DJ. Peters
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 31.07.2006, 21:05    Titel: Antworten mit Zitat

Ach, das hab ich schon gemacht. Muss ich mal rauskramen.
Das geht mit den Windows debug funktionen, dadurch kann man, wenn man als administrator eingeloggt ist, auf den RAM von anderen Programmen zugreifen. Ich poste gleich mal den quellcode von 2 FB programmen. Das eine erhöht alle 5sec eine zahl um 2, das andere ändert dann die 2 in 3, schon wird immer 3 addiert zwinkern

Muss mal gucken, ob ich das noch im backup habe, meine festplatte is kaputt, hab aber noch ein wenig retten können.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Michael712
aka anfänger, programmierer


Anmeldungsdatum: 26.03.2005
Beiträge: 1593

BeitragVerfasst am: 01.08.2006, 01:56    Titel: Antworten mit Zitat

Michael Frey hat Folgendes geschrieben:

Wie bist du an den Pointer vom Screen gekommen?

Screenptr rul0rt Zunge rausstrecken


Code wieder gefunden, hab ich übrigens mal nach nem c tutorial gemacht.
Zuerst beide Programme kompilieren, danach ram1.exe starten, dann ram2.exe.

ram1.bas:
Code:

screen 18
Dim As Integer i,j,k,pause=1000

i=1
j=2
k=j+1
Print @j   'mit der ausgabe von ram2.exe vergleichen
Do
   Sleep pause,1
   Print i,j
   i+=j
   If j+1<>k Then
      Print "j wurde von";k-1;" zu";j;" verändert"
      k=j+1
   End If
Loop until i>100000 Or Inkey<>""


ram2.bas
Code:

#include "windows.bi"

Screen 18

Option Explicit

Declare Sub aendere(phandle As handle, alt AS Integer, neu As Integer)
Declare Function suche_wert(phandle As handle, wert As Integer, start As uInteger, ende As uInteger)

Dim As handle phandle
Dim As hwnd fenster
Dim As dword pid
Dim As Integer buffer

fenster = FindWindow(0,"ram1")                   'Fenster suchen und hwnd speichern
If fenster=0 Then
   Print "Fenster konnte nicht gefunden werden."
   Sleep
   End
End If

GetWindowThreadProcessId(fenster, @pid)          'prozess id zu dem fenster speichern
phandle = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)  'Prozess "öffnen", um nacher variablen zu suchen/ändern

aendere(phandle,2,3)                            'hier den alten und neuen wert eingeben
aendere(phandle,1000,100)       

Print "Fertig."
Sleep
CloseHandle(phandle)                             'Prozess schließen


Sub aendere(phandle As handle, alt AS Integer, neu As Integer)
   Dim AS MEMORY_BASIC_INFORMATION mbi
   Dim As Unsigned Integer adress = &H400000, adresse, rw
   Dim As Integer start, ende, buffer
   buffer=neu

   do
      VirtualQueryEx(phandle,cast(any ptr,adress),@mbi,sizeof(MEMORY_BASIC_INFORMATION))
      If mbi.State = MEM_COMMIT And mbi.Protect = PAGE_READWRITE And mbi.type= 16777216 THen            'Prüfen, ob man nicht im Programmspeicher ist
         start = mbi.BaseAddress
         ende = start+mbi.regionsize
         
         Do
            adresse=suche_wert(phandle, alt, start, ende)                           'Den alten wert suchen

            If adresse<>0 Then
               WriteProcessMemory(phandle, cast(any ptr,adresse), @buffer, sizeof(buffer),0) 'und ändern
               Print alt;" gefunden an adresse: ";adresse;" und geändert zu";neu
               start=adresse
            End IF
         Loop Until adresse=0
      End If
      adress += mbi.RegionSize
   Loop Until adress > &H8000000
End Sub

Function suche_wert(phandle As handle, wert As Integer, start As uInteger, ende As uInteger)
   Dim As Integer r,i,buffer
   
   For i = start To ende+1
      ReadProcessMemory(phandle, cast(any ptr,i), @buffer, sizeof(buffer), 0)  'an der adresse einleses
      If buffer=wert Then Return i                                             'und prüfen, ob der wert enthalten ist
   Next i
End Function     


Hab ein bisschen kommentiert, mach nacher vielleicht noch mehr.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz