Windows 7 x86 - CompareMemoryString Bug

Hier kann alles mögliche diskutiert werden. Themen zu Purebasic sind hier erwünscht.
Flames und Spam kommen ungefragt in den Mülleimer.
Benutzeravatar
7x7
Beiträge: 591
Registriert: 14.08.2007 15:41
Computerausstattung: ganz toll
Wohnort: Lelbach

Beitrag von 7x7 »

Kaeru Gaman hat geschrieben:ähm...

bekomm ich jetzt von Microsoft nen Gehaltsscheck, oder warum bekomme ich hier Bugmeldungen der Windows7-Beta gepostet?
oppala??

Willkommen im Entwicklerteam! :freak:
- alles was ich hier im Forum sage/schreibe ist lediglich meine Meinung und keine Tatsachenbehauptung
- unkommentierter Quellcode = unqualifizierter Müll
msschlt

Beitrag von msschlt »

Ihr habt beide recht! Aber..

Code: Alles auswählen

Text1 = @"HaHa"
..das heißt noch lange nicht das Text1 ein String ist, für mich ist es eine Variable (Long) mit einem Pointer zu X (unbekannt).
PureBasic sieht das auch so und behandelt es dem entsprechend.

Wird nun die String Funktion CompareMemoryString darauf angewendet sichert sich PB mit einem MaxCount ab.
Der Punkt zu dem maximal gesucht wird um eine Null Terminierung zu finden.

Und nun kommen wir zum Bug.
PB nutzt die MSVCRT.DLL, diese unterscheidet sich aber von XP zu VISTA und WIN7.
(Ich habe den Fehler unter VISTA und WIN7)

Und hier liegt der Hund begraben, ein Versionskonflikt.

Code: Alles auswählen

mov     eax, offset Str ; "HaHa"
mov     Str1, eax
mov     edx, offset Str ; "HaHa"
lea     ecx, Str2       ; int
call    sub_402008
push    0FFFF0001h      ; MaxCount
push    1               ; int
mov     eax, Str2
push    eax             ; Str2
push    Str1            ; Str1
call    sub_402390
PB gibt einen MaxCount von 4294901761 byte an (ffff0001h, ca 4GB),
die MSVCRT.DLL:strnicmp unter VISTA/WIN7 steigt aber bei 2147483647 byte (7fffffffh, 2GiB) aus.
Der Return entspricht also keinem Ergebnis sondern einer Fehlermeldung.

Bei 2GB ist bei der MSVCRT.dll (unter Vista/Win7) also Schluss,
evlt. ist diese Limitierung auch nur in der x64 Version zu finden?!
Sollte in der nächste PB Version unbedingt verbessert werden.

Und nun gib mal jemand Fred bescheid. ^^
Zuletzt geändert von msschlt am 13.01.2009 18:47, insgesamt 3-mal geändert.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Ich würde auch darum bitten den Thread wieder in die Bug - Section zu verschieben, da es nun anscheinend sehr sicher ein PB Bug ist.
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
msschlt

Beitrag von msschlt »

Nachtrag:

Hab mir das jetzt noch mit PBx64 unter VISTAx64 angesehen.
Das Limit von 2GiB ist hier ebenfalls vorhanden und macht keinen unterschied zwischen x86 und x64 Mode.
In dem Fall sollte man auch unabhängig ob PB x86 oder x64 dieses bei beiden von 0FFFF0001h auf 07FFFFFFh korrigieren,
bzw. von 0FFFFFFFFFFFF0001h auf 0000000007FFFFFFFh. (x64)
Zuletzt geändert von msschlt am 13.01.2009 17:54, insgesamt 1-mal geändert.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

K, sieht echt nach nem PB Bug aus, hab jetzt auch mit Win 7 64 getestet, selber Fehler. Könnte das bitte jemand im Englischen Forum melden der msschlt's Erklärung in verständliches Englisch übersetzen kann?
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
msschlt

Beitrag von msschlt »

Mein English ist eher schlecht, dennoch hab ich den Bug mal grob im englischen Forum beschrieben.
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

Beitrag von ts-soft »

msschlt hat geschrieben:Mein English ist eher schlecht, dennoch hab ich den Bug mal grob im englischen Forum beschrieben.
Wenn Ihr schon undokumentierte Features als Bug meldet, dann bitte mit
korrektem Beispielsource. Schon wieder ein #PB_Ignore :freak:

Mach da mal ein -1 oder meinetwegen #PB_Default, #PB_Any draus, ansonsten wirds wohl keiner beachten.
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
msschlt

Beitrag von msschlt »

@ts-soft
Ja ist mir auch gerade aufgefallen und habe es korrigiert. xD
msschlt

Beitrag von msschlt »

@ts-soft:

Wobei, naja was heißt undokumentierte Features?

Code: Alles auswählen

Text1.s = "BUG"
Text2.s = "BUG"

Debug CompareMemoryString(@Text1, @Text2, #PB_String_NoCase, -1, #PB_Ascii)
Das ist doch ganz nach Handbuch oder seh ich das falsch?
Ich weiß die Länge nicht, setze das ASCII Flag und -1.
Würde auch funktionieren wenn PB intern ein max. Count von 2GiB setzen würde.
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

Beitrag von ts-soft »

Wenns mit korrekter (dokumentierter) Syntax passiert, dann ist es wohl ein
Bild

Hier im Thread wurde ja erst der Fehler falsch beschrieben, dann falsch Syntax angewendet usw.

Das sich zum Schluß doch noch ein Fehler herauskristallisiert ist ja mehr
Zufall :lol:

Passiert nur im ASCII-Modus.
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
Antworten