64 Bit Probleme im Programm

Für allgemeine Fragen zur Programmierung mit PureBasic.
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)

64 Bit Probleme im Programm

Beitrag von deichi1 »

Hallo zusammen,

ich habe mit PB 32Bit ein Programm geschrieben, welches die Consolanwendung "Tshark.exe" steuert und die Ausgabe verarbeitet.
In einem ersten Schritt wird "Tshark -D" abgesetzt um die aktiven Netzwerkinterfaces zu ermitteln.
In einem zweiten Schritt werden dann die Caputredaten live oder von Festplatte mittels Tshark untersucht und die Ergebnisse gesammelt.
Das alles funktioniert hervorragend mit einem in 32Bit kompilierten Programm (auch unter Win7 64Bit).
Jetzt möchte ich das Programm mittes PB 64Bit kompilieren und laufen lassen.
Nach dem Kompilieren und einem Programmstart bekomme ich keine Interfaces von Tshark, jedoch die Caputredaten (live oder Festplatte) werden angezeigt und verarbeitet).
Mauell, in einem Konsolfenster, funktioniert der Befehl "Tshark -D".
Tshark ist ein Programm, welches mit Wireshark(64Bit) installiert wird und verwendet die WPcap.dll (sowohl unter 32 und 64Bit).
In einem 32Bit-Systen und einem 64Bit-System ist die DLL immer die Gleiche (kein Versionsunterschied).
Beide PB-Versionen greifen auf die absolut gleiche DLL zu.

Ich verstehe nicht, warum das 64Bit-Programm nur die Interfaceausgabe unterschlägt;-(

Gruß
deichi1
Zuletzt geändert von deichi1 am 09.03.2012 21:06, insgesamt 3-mal geändert.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: PB 32Bit und 64Bit verhalten sich nicht gleich.

Beitrag von STARGÅTE »

Ohne den Code selbst kann man leider nicht viel dazu sagen.

Vermutlich wirst du aber einfach eine Long als Integer oder andersrum deklariert haben, sodass sich zwischen 32Bit und 64Bit ein Strukturlängenunterschied ergibt
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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: PB 32Bit und 64Bit verhalten sich nicht gleich.

Beitrag von ts-soft »

PB verhält sich schon gleich, aber das OS oder diese Exe nicht.
Kann das leider nicht testen, somit bei der Fehlersuche nicht helfen,
möchte Dich aber bitten, den Titel anzupassen, da das ganze kein
PB Problem ist, wie der Titel suggeriert.

Gruß
Thomas
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 »

@ STARGÅTE:

vielen Dank für die schnelle Antwort. Leider ist der gesamte Code so groß (mehere 1000 Zeilen), dass es hier den Rahmen sprängt ihn einzubauen.
Mit Deinem Hinweis auf die Deklaration hast Du mich auf eine Idee gebracht, der ich nachgehen werde.
Wenn ich nicht erfolgreich bin melde ich mich wieder und dann müssen wir einen Weg finden, dass Du denrelevanten Code zu Gesicht bekommst.
Fürs Erste mal vielen Dank;-)

@ ts-soft:

sorry, es war nicht meine Absicht hier einen Fehler in PB darzustellen.
Habe den Titel angepasst.
Ist er so OK?

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 »

deichi1 hat geschrieben:Ist er so OK?
:allright:
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 zusammen,

habe jetzt umfangreiche Tests gemacht und die entsprechenden Proceduren extrahiert, so dass es für jeden nachvollziehbar ist.
Der Beispielcode ist angehängt und auch ausreichend kommentiert.
Es handelt sich um zwei Proceduren, die beide gleich aufgebaut sind.

1. GetInterfaceList()
Sie soll via Tshark.exe -D die Liste der Interfaces ermiteln und im Debugfenster darstellen.

2. LiveCap()
Sie soll via Tshark.exe -i num die Daten vom aktiven Ethernetinterface lesen und im Debugfenster darstellen.
Die Nummer muss vor dem Start ermittelt und in Option2.s eingetragen werden.

Getestet habe ich die Proceduren unter folgenden Betriebssystemen:

XP32/PB32 V4.60
Win7 32/PB32 V4.60
Win7 64/PB32 V.60
Win7 64/PB64 V4.60

Die Ergebnisse:

XP32|PB32 V4.60
GetInterfaceList: funktioniert
LiveCap: funktioniert

Win7 32|PB32 V4.60
GetInterfaceList: funktioniert
LiveCap: funktioniert

Win7 64|PB32 V4.60
GetInterfaceList: funktioniert nicht
LiveCap: funktioniert

Win7 64| PB64 V4.60
GetInterfaceList: funktinoiert nicht
LiveCap: funktioniert


Verblüffend ist, dass nur die eine Routine (GetInterfaceList) unter 64Bit OS nicht will.
Wie schon erwähnt, über CMD funktioniert der Befehl.

Hat Irgendjemand eine Idee, was ich falsch mache oder was das am OS schräg sein könnte?
Habe wirklich keinen Plan mehr;-)

Gruß deichi1

Code: Alles auswählen

;***********************************************************
;Vorbedingung:
;Es muss Whireshark in seiner neusest, stabilen Version installiert sein.
;Idealerweise unter einem 64Bit.OS und als 64Bit-Version
;Der Programmoutput beider Proceduren wird im Debugfenster ausgegeben.
;
;GetInterfaceList():
;Diese Procedure soll die Interfaceliste ermitteln und darstellen.
;
;LiveCap():
;Es werden die Daten vom Netzwerkinterface "1" eingeholt und dargestellt.
;Interface-1 ist meist das erste, aktive Ethernetinterface.
;***********************************************************

Option1.s = "-D"
;
;Die Zahl hinter dem -i bezeichnet das Interface von dem
;gelesen werden soll. Um die Zahl zu bekommen sollte entwerder
;die Procedure GetInterfaceList() ausgefürht werden oder man ermittelt 
;sie via Tshark.exe mit der Option "-D"
;
Option2.s = "-i 1"


Procedure GetInterfaceList(Option1.s)
  
  Option.s  =   Option1.s
  Prog.s = "c:\programme\wireshark\tshark.exe"
  ProgNum.q = RunProgram(Prog.s, Option.s, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)

  If ProgNum  
    While ProgramRunning(ProgNum)
      If AvailableProgramOutput(ProgNum)
      Debug ReadProgramString(ProgNum)
      EndIf
  Wend
    KillProgram(ProgNum)
    CloseProgram(ProgNum) 
  EndIf

EndProcedure

Procedure LiveCap(Option2.s)
  
  Option.s  =   Option2.s
  Prog.s = "c:\programme\wireshark\tshark.exe"
  ProgNum.q = RunProgram(Prog.s, Option.s, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide)

  If ProgNum  
    While ProgramRunning(ProgNum)
      If AvailableProgramOutput(ProgNum)
      Debug ReadProgramString(ProgNum)
      EndIf
  Wend
    KillProgram(ProgNum)
    CloseProgram(ProgNum) 
  EndIf

EndProcedure


;GetInterfaceList(Option1.s)
LiveCap(Option2.s)
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 »

Du nutzt ja immer dieselbe Exe? Sollte es da nicht 2 von geben. Und das mit den fixen Pfaden
ist hoffentlich nur zu Testzwecken, den Ordner ProgramFiles, sowie alle anderen Systemordner
sollte man immer per API feststellen.

Ansonsten, wenn es von der Shell aus klappt, schreib doch einfach eine Batch und starte die.

Nachtrag:
Das starten der Bildschirmtastatur unter Win 7 mit:

Code: Alles auswählen

RunProgram("osk")
funktioniert auch nur mit einer Exe, die im selben Format compiliert wurde, wie das OS!

Ich vermute mal, es werden aufgrund der Wow64FsRedirection notwendige DLLs nicht gefunden,
folgender Code könnte Dir helfen:

Code: Alles auswählen

Procedure DisableWow64FsRedirection(Flag)
  If OSVersion() >= #PB_OS_Windows_Vista
    Protected DLL = OpenLibrary(#PB_Any, "kernel32.dll")
    Protected IsWow64, Result
    If DLL
      If CallFunction(DLL, "IsWow64Process", GetCurrentProcess_(), @IsWow64)
        If IsWow64
          Result = CallFunction(DLL, "Wow64EnableWow64FsRedirection", Flag ! 1)
        EndIf
      EndIf
      CloseLibrary(DLL)
    EndIf
  EndIf
  ProcedureReturn Result
EndProcedure
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
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 »

Du schreibst folgendes:
;Die Zahl hinter dem -i bezeichnet das Interface von dem
;gelesen werden soll. Um die Zahl zu bekommen sollte entwerder
;die Procedure GetInterfaceList() ausgefürht werden oder man ermittelt
;sie via Tshark.exe mit der Option "-D"
Wobei ich im ersten Blick sehe, das beide Procedure gleich sind und du sie mit veschiedenen
Parametern aufrufst.
Theoretisch müsste das gleiche bei folgender Procedure funktionieren:

Code: Alles auswählen

Option1.s = "-i 1"
;...
GetInterfaceList(Option1)
Vielleicht liegt das am Aufrufparameter -D, das es nicht funktionirt. Habe nichts
installiert um es testen zu können.

Gruß,
Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
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 »

ts-soft;

das ist immer die gleiche EXE weil Wireshark als 64Bit App installiert ist.
Einen Test mit Wireshark 32Bit unter 64Bit OS habe ich nicht gemacht.
Es wird immer die gleiche wpcap.dll verwendet.
Die Jungs von Wireshark haben an der DLL und auch an den Zulieferprogrammen (Tshark.exe usw.) absolut nichts geändert.
Der fixe Pfad ist nur zum Test und zur Vereinfachung.

Aber warum funktioniert die gleiche EXE mit anderen Parameter?
Kann wohl kein Problem der DLL sein. Oder?

Wenn ich eine Batch verwende habe ich immer noch das Problem, dass ich die Ausgabe in mein Programm bekommen muss.
Den der Befehl "Tshark.exe -D > Test.txt" funktioniert schon garnicht.

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 Falco,

das "D" muss groß geschrieben sein, das "d" eine andere Bedeutung hat.
Ich habe extra zwei Proceduren geschrieben, damit es deutlicher wird was ich meine.

Gruß
deichi1
Antworten