Aktuelle Zeit: 18.11.2017 11:59

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Wie IMA-Problem durch Pseudotype finden?
BeitragVerfasst: 03.12.2015 22:29 
Offline
Benutzeravatar

Registriert: 25.03.2008 15:07
Wohnort: 's Ländle
Hallo miteinander,

lange nicht mehr gepostet. :)

Ich spiele gerade mit der VLC-Library herum und habe extreme Probleme einen Bug zu isolieren, der einen ungültigen Speicherzugriff auslöst. Mir ist soweit klar, dass es sich um ein Problem mit der Verwendung von Pseudotypes in Prototypes handelt bei x86-Kompilat. Ich stehe irgendwo auf der Leitung...

Folgender Code-Ausschnitt macht KEINE Probleme, wenn ich eine Exe als "Unicode x64", "Ascii x64" oder "Ascii x86" kompiliere. Wenn ich aber als "Unicode x86" kompiliere dann erhalte ich immer einen illegalen Speicherzugriff an einer scheinbar absolut zufälligen Adresse:
Code:
Prototype.i libvlc_media_new_path(instance, path.p-ascii) ; <-- hier ist der problematische Pseudotype
Global libvlc_media_new_path.libvlc_media_new_path

;(...)

libvlc_media_new_path = GetFunction(#VLC_DLL, "libvlc_media_new_path")

;(...)

; Hier kommt der IMA!
media = libvlc_media_new_path(instanz, "C:\Users\blabliblub\Downloads\Downloader\Deichkind - Like Mich Am Arsch (Official Video)\Deichkind - Like Mich Am Arsch (Official Video) (1080p).mp4")


Und nun der Witz: Wenn ich mit einem eigenen "Pseudo-Pseudotype" herumpfusche, dann läuft alles einwandfrei...
Code:
; Mein eigener "Pseudo-Pseudotype" ;)
Procedure.s PseudoAscii( String$ )
  CompilerIf #PB_Compiler_Unicode
    PokeS(@String$, PeekS(@String$), -1, #PB_Ascii)
  CompilerEndIf
  ProcedureReturn String$
EndProcedure

;(...)

Prototype.i libvlc_media_new_path(instance, path$) ; <-- diesmal "normaler" String statt Pseutotype
Global libvlc_media_new_path.libvlc_media_new_path

;(...)

libvlc_media_new_path = GetFunction(#VLC_DLL, "libvlc_media_new_path")

;(...)

; Diesmal KEIN IMA... trotz "Stringgepfusche"... :/
media = libvlc_media_new_path(instanz, PseudoAscii("C:\Users\blabliblub\Downloads\Downloader\Deichkind - Like Mich Am Arsch (Official Video)\Deichkind - Like Mich Am Arsch (Official Video) (1080p).mp4"))


Hat jemand eine Idee in welche Richtung ich suchen kann um den Bug weiter einzukreisen?
Es scheint auch kein PureBasic-Bug zu sein, denn wenn ich den Prototypeaufruf auf eine eigene Prozedur umleite und den String mit dem MemoryViewer untersuche kann ich keinen Unterschied zwischen "Pseudotype" und "Pseudo-Pseudotype" erkennen... Die Strings sind identisch...

_________________
PureBasic 5.31 x86/x64 | Windows 7 (x64) | Windows XP (x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wie IMA-Problem durch Pseudotype finden?
BeitragVerfasst: 04.12.2015 09:36 
Offline
Benutzeravatar

Registriert: 28.07.2005 12:39
Wenn es unter x64 laeuft, dann versuch mal PrototypeC.

_________________
Suche


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wie IMA-Problem durch Pseudotype finden?
BeitragVerfasst: 04.12.2015 10:02 
Offline
Benutzeravatar

Registriert: 30.03.2010 15:24
Pseudotype IMA x86, da klingelt bei mir was :shock:

So ein Problem hatte ich auch schon, es trat leider nur selten auf war nicht wirklich reproduzierbar.
Manchmal schlägt nur die API fehl, mal gibt’s ein IMA aber zu 98% läuft es.

Welche PB Version benutzt Du?

_________________
PureBasic 5.24 LTS (Windows x86/x64) | Windows7 SP1 x64 | windows 10 x64 Anniversary Bug


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wie IMA-Problem durch Pseudotype finden?
BeitragVerfasst: 04.12.2015 10:15 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
@_JON_
Die DLL benutzt wahrscheinlich CDECL CallingConvention, was dann zu Stackfehlern führen kann (nicht unbedingt sofort).
Bei der 64-Bit DLL ist es egal, welche CallingConvention er einstellt, die nutzt sowieso FASTCALL (nur 64-Bit).

_________________
PureBasic 5.61 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 18.2 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wie IMA-Problem durch Pseudotype finden?
BeitragVerfasst: 04.12.2015 10:45 
Offline
Benutzeravatar

Registriert: 30.03.2010 15:24
Ja kann sein weiß nicht mehr, aber stimmt die libVLC ist cdecl. :D

_________________
PureBasic 5.24 LTS (Windows x86/x64) | Windows7 SP1 x64 | windows 10 x64 Anniversary Bug


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wie IMA-Problem durch Pseudotype finden?
BeitragVerfasst: 04.12.2015 23:13 
Offline
Benutzeravatar

Registriert: 25.03.2008 15:07
Wohnort: 's Ländle
Ja, super Leute, vielen Dank! Es lag wirklich an der falschen Aufrufkonvention (cdecl ist richtig). :allright:

Da wäre ich nie drauf gekommen, weil der fehlerhafte Code - was mich immer noch verwundert - mit "Ascii x86" Compileroptionen problemlos lief und nur bei "Unicode" das Problem auftrat.

_________________
PureBasic 5.31 x86/x64 | Windows 7 (x64) | Windows XP (x86)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wie IMA-Problem durch Pseudotype finden?
BeitragVerfasst: 04.12.2015 23:19 
Offline
Benutzeravatar

Registriert: 08.09.2004 00:57
Wohnort: Berlin
Regenduft hat geschrieben:
mit "Ascii x86" Compileroptionen problemlos lief und nur bei "Unicode" das Problem auftrat.

Der Fehler wäre aber früher oder später aufgetreten <) , bei Unicode eben früher.

Wenn ein Lib/DLL Aufruf mit 64-Bit einwandfrei funktioniert, aber mit 32-Bit nicht, immer erstmal die Aufrufkonventionen prüfen.
Ist das häufigste Problem in diesem Falle, sparste also Zeit bei der Fehlersuche.

_________________
PureBasic 5.61 | SpiderBasic 2.10 | Windows 10 Pro (x64) | Linux Mint 18.2 (x64)
"Ich möchte gerne die Welt verändern, doch Gott gibt den Quellcode nicht frei."
Bild


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: Wie IMA-Problem durch Pseudotype finden?
BeitragVerfasst: 07.11.2017 23:48 
Offline
Benutzeravatar

Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge
utf8 funktioniert!

Prototype.i libvlc_media_new_path(instance, path.p-utf8)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 5 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye