64 Bit Probleme im Programm

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: 64 Bit Probleme im Programm

Beitrag von ts-soft »

deichi1 hat geschrieben:Einen Test mit Wireshark 32Bit unter 64Bit OS habe ich nicht gemacht.
Naja, das kann ja auch nicht funktionieren! Auf einem 64-Bit OS funktionieren grundsätzlich nur 64-Bit
Treiber!

Das einzige was noch Funktionieren könnte, ist die von mir gepostete Funktion:

Code: Alles auswählen

DisableWow64FsRedirection(#True)
Aber die ist mit Vorsicht zu genießen, da die eigene Exe, solange die Redirection
disabled ist, keinerlei API aufrufen darf, da die richtige DLL nicht gefunden wird!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
deichi1
Beiträge: 14
Registriert: 08.03.2012 17:43
Computerausstattung: _____________________________________________
i7-12700K 3.60 GHz | 32 GB | Windows 11 Pro (64bit) | PrureBasic 6.10 LTS (64bit)

Re: 64 Bit Probleme im Programm

Beitrag von deichi1 »

Hallo ts-soft,

danke für die Funtion, leider bringt die es auch nicht.

Code: Alles auswählen

DisableWow64FsRedirection(#True)
Ich möchte mich an dieser Stelle noch mal wiederholen:

Warum funktioniert der Parameter "-D" nicht, wärend ein anderer Parameter wie "-i num" und weitere funktionieren?

Das Programm welches verwendet wird ist das Gleiche!
Die DLL die das Programm verwendet ist die Gleiche!

Kann es mit dem stdout und dessen Puffer zu tun haben?
Und wenn ja, was kann ich daran ändern?

Gruß
deichi1
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: 64 Bit Probleme im Programm

Beitrag von NicTheQuick »

Vielleicht bekommst du ja was auf den Error-Stream geschickt, d.h. du musst schauen, was 'ReadProgramError()' so liefert.
deichi1
Beiträge: 14
Registriert: 08.03.2012 17:43
Computerausstattung: _____________________________________________
i7-12700K 3.60 GHz | 32 GB | Windows 11 Pro (64bit) | PrureBasic 6.10 LTS (64bit)

Re: 64 Bit Probleme im Programm

Beitrag von deichi1 »

Hallo NicTheQuick,

der Errorstring ist leer, also kein Fehler.
Werde das Ganze mit einer Consoleanwendung testen.
Wenn das Ergebins veststeht, werde ich es posten.

Gruß
deichi1
deichi1
Beiträge: 14
Registriert: 08.03.2012 17:43
Computerausstattung: _____________________________________________
i7-12700K 3.60 GHz | 32 GB | Windows 11 Pro (64bit) | PrureBasic 6.10 LTS (64bit)

Re: 64 Bit Probleme im Programm

Beitrag von deichi1 »

Hallo zusammen,

habe nun folgenden Code getestet.

Code: Alles auswählen

OpenConsole()

*Puffer = AllocateMemory(512)

Option.s  =   "-D"
Prog.s = "c:\programme\wireshark\tshark.exe"
ProgNum.q = RunProgram(Prog.s, Option.s, "", #PB_Program_Open|#PB_Program_Read)

Debug ReadConsoleData(*Puffer, 512) ;Erst nach Eingabe von 'Enter'
                                                      ;werden die Zeichen '13+10'
                                                      ;zurück gegeben, sonst nichts.

Input()

CloseConsole()
Im Consolefenster sehe ich die Interfaceliste.
Leider weiss ich nicht wie ich die Daten nun in einen String zur weiteren Verarbeitung bekomme;-(
Mit ReadConsolData() funktioniert es auch nicht, im Puffer ist nicht ein Byte zu erkennen.
Hat jemand ne Idee?

Gruß
deichi1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: 64 Bit Probleme im Programm

Beitrag von ts-soft »

RunProgram gibt kein Quad zurück, sondern ein Integer.

Zum lesen des von Dir geöffneten Programm, solltest Du auch die Process Lib nutzen:
AvailableProgramOutput(Programm)
ReadProgramString(Programm)
usw.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: 64 Bit Probleme im Programm

Beitrag von NicTheQuick »

Also unter Linux erhalte ich mit diesem Code die komplette Ausgabe von 'ls'.

Code: Alles auswählen

Procedure GetProgramOutput(ProgramName.s, Parameter.s, List out.s())
  Protected Program.l, Result.l
  
  Program = RunProgram(ProgramName, Parameter, "", #PB_Program_Open | #PB_Program_Read)
  If Program
    While ProgramRunning(Program)
      If AddElement(out())
        out() = ReadProgramString(Program)
      EndIf
    Wend
    Result = ProgramExitCode(Program)
    CloseProgram(Program)
    ProcedureReturn Result
  EndIf
  
  ProcedureReturn #False
EndProcedure

NewList out.s()
Debug GetProgramOutput("ls", "", out())
ForEach out()
  Debug out()
Next
deichi1
Beiträge: 14
Registriert: 08.03.2012 17:43
Computerausstattung: _____________________________________________
i7-12700K 3.60 GHz | 32 GB | Windows 11 Pro (64bit) | PrureBasic 6.10 LTS (64bit)

Re: 64 Bit Probleme im Programm

Beitrag von deichi1 »

Hallo zusammen,

vielen Dank für die schnellen Antworten.

@ts-soft:

Am Anfang dieser Diskusion ging es doch genau darum, dass die Process-Lib nicht will;-)
Der letzte Code ist nur ein Versuch, ob diese Möglichkeit fruchtet.
Leider nur halb.
Als dritte Möglichkeit habe ich noch das direkte benutzen der wpcap.lib, was jedoch sehr kompliziert ist.
Wenn das auch nicht klappt, gebe ich das Programmieren auf;-) (Aber nicht für immer.)
Jedoch überlege ich gerade ob ich nicht das Ganze mal mit Ubuntu testen sollte.
Doch das ist für mich schwieriger als Windows und auf dem entsprechenden Windoof-System habe ich halt noch andere Apps, die ich nicht für Linux bekomme.

@NicTheQuick:

vielen Dank für den Beispielcode, leider funktioniert der bei mir mit Tshark auch nicht.
Du benutzt Ubuntu 64Bit?
Würde ich auch gerne mal testen, weiss jedoch nicht wie ich die neueste Version von Wireshark und PB installiert bekomme;-(
Die Installationspakete, die ich bis jetzt gefunden habe, sind uralt Versionen.

Gruß
deichi1
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: 64 Bit Probleme im Programm

Beitrag von NicTheQuick »

deichi1 hat geschrieben:Würde ich auch gerne mal testen, weiss jedoch nicht wie ich die neueste Version von Wireshark und PB installiert bekomme;-(
Die Installationspakete, die ich bis jetzt gefunden habe, sind uralt Versionen.
Das Problem verstehe ich nicht. Von Wireshark hab ich Version 1.2.7 drauf, also direkt aus den Paketquellen. Dazu muss man aber sagen, dass ich noch Ubuntu 10.04 benutzt. Bei Ubuntu 11.10 scheint es Version 1.6.2-1 ein zu sein (siehe hier, also durchaus aktuell.
Und das aktuellste PureBasic liegt auch für für Linux vor.
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: 64 Bit Probleme im Programm

Beitrag von Falko »

Ich habe es auch mal installiert und unter PB 64-Bit ausprobiert:

Code: Alles auswählen

BufferLen = 512
*Buffer = AllocateMemory(BufferLen)

If OpenConsole()
  SetCurrentDirectory("F:\Program Files\Wireshark")
  ;define RPG=RunProgram("tshark.exe","-D","",#PB_Program_Open|#PB_Program_Read)
  Define RPG=RunProgram("tshark.exe","-i 3","",#PB_Program_Open|#PB_Program_Read)
  If RPG
    While ProgramRunning(RPG)
      ReadProgramData(RPG,*Buffer, BufferLen)
      Debug  ReadProgramString(RPG)
    Wend
  EndIf
  CloseProgram(RPG)
  MessageRequester("Ausgabe",PeekS(@Buffer))
  ;MessageRequester("Ausgabe",Speicher)
EndIf
CloseConsole()
FreeMemory(*Buffer)
Also mit -i 3 (meine Netzwerkkarte werden Daten ausgespukt)
Wenn ich -D benutze, wird nichts über dem Debugger oder die Messagebox
angezeigt, als ob das tshark, nichts ausgibt. In der Console werden bei
mir aber drei Netzwerkkarten korrekt angezeigt.

Läuft so bei mir unter 64-Bit ode x86 PB-Compilat nur über -i ...

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Antworten