Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.08.2007, 10:29 Titel: Die Herausforderung... Code funzt nicht! |
|
|
Hi, ich hab ein Problem das ich einfach nicht lösen kann.
Also entweder hängt sich der Code auf oder stürtzt einfach ab
Das Problem befindet sich in der dritten For..Next schleife.
Oder besser gesagt wird dort ausgelöst .
Code: | Function PasswortHash(Passwort as String) as String
dim as integer Keylength = 1024
dim as integer Position
dim as integer Random1
dim as integer Char,Pos2
dim as string TmpHash,TmpHash2
Random1=Len(Passwort)/16
Randomize Random1
For Position = 1 to Len(Passwort)
Char=ASC(MID(Passwort,Position,1))+INT(RND*25600)
TmpHash+=HEX(Char)
Next
Random1=LEN(TmpHash)
Randomize Random1
For Position = 1 to Len(TmpHash)
Char=ASC(MID(TmpHash,Position,1))+INT(RND*1024)
TmpHash2+=CHR(Char)
Next
Passwort=""
Dim Size as integer
Size = Len(TmpHash2)
For Position=0 to Keylength
Pos2=Int(RND*Size)-6
Char=ASC(MID(TmpHash2,Pos2,1))
Passwort+=Chr(Char)
Next
PasswortHash=Passwort
end function
' Programm
Dim As String H
H=Passworthash ("1234")
Print H
sleep
|
_________________ Bis irgendwann... 
Zuletzt bearbeitet von AndT am 01.08.2007, 12:47, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 01.08.2007, 10:36 Titel: |
|
|
Dir ist klar, das Pos2 negative Werte annehmen kann? Vielleicht liegt der Fehler dort. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 01.08.2007, 10:39 Titel: |
|
|
Ich vermute den Fehler in den beiden Zeilen
Code: |
Pos2=Int(RND*Size)-6
Char=ASC(MID(TmpHash2,Pos2,1))
|
durch Int(RND*Size)-6 koennten zahlen <1 entstehen
und bei "mid(string,<1,len)" zu fehler (abstuerzen ohne vorwarnung ) fuehren.
Edit: da war mal wieder jemand schneller  _________________
 |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.08.2007, 11:01 Titel: |
|
|
das hat alles nichts gebracht
Unerklärlich  _________________ Bis irgendwann...  |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.08.2007, 11:42 Titel: |
|
|
Ich habs sogar schon mit Code: | For Position=1 to Keylength-1
Pos2=Int(Rnd*Size)+1
If Pos2<1 Then Pos2=1
TmpX=MID(TmpHash2,Pos2,1)
Char=ASC(TmpX)
Print Pos2,TmpX,Char
Passwort+=Chr(Char)
Next | versucht.
Kompletter Debugcode:
Code: | Function PasswortHash(Passwort as String) as String
dim as integer Keylength = 1024
dim as integer Position
dim as integer Random1
dim as integer Pos2
dim as string TmpHash,TmpHash2,Tmpx
Dim as ubyte Char
Dim Size as integer
Random1=Len(Passwort)/16
Randomize Random1
Print "1"
Size=Len(Passwort)
For Position = 1 to Size
Char=ASC(MID(Passwort,Position,1))+INT(RND*25600)
TmpHash+=HEX(Char)
Next
Print "2"
Random1=LEN(TmpHash)
Randomize Random1
Size=Len(TmpHash)
Print "3"
For Position = 1 to Size
Char=ASC(MID(TmpHash,Position,1))+INT(RND*1024)
TmpHash2+=CHR(Char)
Next
Print len(TmpHash2)
Print "4"
Passwort=""
Print "5"
Size = Len(TmpHash2)
Pos2=1
Char=0
For Position=1 to Keylength-1
Print "a1"
'Pos2=Int(Rnd*Size)+1
Print "a2"
If Pos2<1 Then Pos2=1
Print "a3"
TmpX=MID(TmpHash2,Pos2,1)
Print "a4"
Char=ASC(TmpX)
Print "a5"
Print "Details: "; Pos2,TmpX,Char,Position
Passwort+=Chr(Char)
Next
PasswortHash=Passwort
end function
' Programm
Dim As String H
H=Passworthash ("1234") |
Ziel ist es, das das Programm sich beendet, ohne aufzuhängen oder abzustürzen _________________ Bis irgendwann...  |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 01.08.2007, 12:07 Titel: |
|
|
Also das Ding ist das merkwuerdigste das mir je untergekommen ist,
ich programmiere nun fast schon ein Jahr in FreeBASIC aber dieses Programm ist das erste das meinen Rechner komplett lahmlegen konnte und das bei einer eigentlich recht einfachen Stringmanipulation... das kann ich mir absolut nicht erklaeren, da ich keine weiteren Fehler entdecken konnte....
Der fehler tritt IMMER in der "For Position=1 to Keylength-1 " schleife auf
ich habe extra noch eine sicherheitsabfrage der Pos2 eingefuegt
Code: |
If Pos2<1 Then Pos2=1
If Pos2>Size-1 Then Pos2=Size-1
|
und dann blieb ALLES haengen.... _________________
 |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 01.08.2007, 12:12 Titel: |
|
|
Lass dir mal kurz vor dem Absturz die Werte aller verwendeten Variablen (incl. LEN() usw.) ausgeben. Vielleicht hilft das weiter. _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.08.2007, 12:17 Titel: |
|
|
Ich hab den schon den Starken verdacht eines Bugs der FBC
Mittlerweile hab ich sogar das schon im englischen Forum gepostet mal abwartem was die sagen. _________________ Bis irgendwann...  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 01.08.2007, 12:22 Titel: |
|
|
Wenn du wüsstest, wieviele Bugs ich schon in OMIKRON-BASIC zu finden geglaubt habe ...
Bis zu welcher Marke funktioniert denn das Programm ohne Absturz? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 01.08.2007, 12:23 Titel: |
|
|
das Programm laueft fehlerfrei durch wenn man
Passwort+=chr(Char) ausklammert... die werte sehen korrekt aus,
fuegt man es wieder ein stuerzt es ab...
kann mir jedoch nicht erklaeren wieso.... _________________
 |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 01.08.2007, 12:26 Titel: |
|
|
kann nicht genau erklaeren wieso, aber so gehts...
Code: |
const Keylength = 1024
Function PasswortHash(Passwort as String) as String
Dim passwortx as String*Keylength
dim as integer Position
dim as integer Random1
dim as integer Pos2
dim as string TmpHash,TmpHash2,Tmpx
Dim as ubyte Char
Dim Size as integer
Random1=Len(Passwort)/16
Randomize Random1
Size=Len(Passwort)
For Position = 1 to Size
Char=ASC(MID(Passwort,Position,1))+INT(RND*25600)
TmpHash+=HEX(Char)
Next
Random1=LEN(TmpHash)
Randomize Timer
Size=Len(TmpHash)
For Position = 1 to Size
Char=ASC(MID(TmpHash,Position,1))+INT(RND*1024)
TmpHash2+=CHR(Char)
Next
Print len(TmpHash2)
Passwort=""
Size = Len(TmpHash2)
If Size<1 Then Size=1
Pos2=1
Char=0
For Position=1 to Keylength
Pos2=Int(Rnd*Size)+1
If Pos2<1 Then Pos2=1
If Pos2>Size Then Pos2=Size
TmpX=MID(TmpHash2,Pos2,1)
Char=ASC(TmpX)
If Char=0 Then Char=1
PasswortX+=Chr(Char)
Next
PasswortHash=PasswortX
end function
' Programm
Dim As String H
H=Passworthash ("1234")
?H
sleep
|
_________________
 |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.08.2007, 12:29 Titel: |
|
|
Es heisst, wenn man unpräzise Dimmt, dann soll der Linker mehr Code erstellen als nötig ist und dass dann auchnoch Fehlerhaft
Lol^^
Warum kommt den jetzt bei jedem programmstart was anderes raus???
Ziel ist es jetzt, das das jedesmal der gleiche String rauskommt
//Edit
Ich hab mittlerweile schon den Titel geändert xD _________________ Bis irgendwann...  |
|
Nach oben |
|
 |
nemored

Anmeldungsdatum: 22.02.2007 Beiträge: 4699 Wohnort: ~/
|
Verfasst am: 01.08.2007, 12:50 Titel: |
|
|
Wieso soll dasselbe rauskommen, wenn du RND verwendest? _________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 01.08.2007, 12:52 Titel: |
|
|
hatte ein Random versehentlich mit auf "Ranomize Timer" gesetzt  _________________
 |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.08.2007, 12:58 Titel: |
|
|
jo
jetzt passts
Thanks  _________________ Bis irgendwann...  |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 01.08.2007, 13:13 Titel: |
|
|
Du darfst das neue Passwort nicht in der Function uebergebene variable "Passwort" speichern... eine extravariable wie die zu debugzwecken TmpX reicht aus....
Code: |
Function PasswortHash(byval Passwort as String) as String
dim as integer Keylength
dim as integer Position
dim as integer Random1
dim as integer Pos2
dim as string TmpHash,TmpHash2,Tmpx
Dim as ubyte Char
Dim Size as integer
Keylength=1024
Random1=Len(Passwort)/16
Randomize Random1
Size=Len(Passwort)
For Position = 1 to Size
Char=ASC(MID(Passwort,Position,1))+INT(RND*25600)
TmpHash+=HEX(Char)
Next
Random1=LEN(TmpHash)
Randomize Random1
Size=Len(TmpHash)
For Position = 1 to Size
Char=ASC(MID(TmpHash,Position,1))+INT(RND*1024)
TmpHash2+=CHR(Char)
Next
Print len(TmpHash2)
TmpX=""
Size = Len(TmpHash2)
If Size<1 Then Size=1
For Position=1 to Keylength
Pos2=Int(Rnd*Size)+1
If Pos2<1 Then Pos2=1
If Pos2>Size Then Pos2=Size
Char=ASC(MID(TmpHash2,Pos2,1))
If Char=0 Then Char=1
TmpX+=Chr(Char)
Next
PasswortHash=TmpX
end function
' Programm
Dim As String H
H=Passworthash ("1234")
?H
sleep
|
der fehler lag also einfach darin das aus irgendeinem Grund die function nicht damit klar kommt, die uebergebene Variable ab einen bestimmten punkt zu aendern... _________________
 |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.08.2007, 13:22 Titel: |
|
|
Nur zu komisch das das hier geht
Code: | Function LOL(LOLTEXT as String) as string
dim as integer Size,Position
Size=Len(LOLTEXT)
FOR Position = 1 to Size
LOLTEXT+="A"
NEXT
LOL=LOLTEXT
End Function
?LOL ("1234")
sleep
|
_________________ Bis irgendwann...  |
|
Nach oben |
|
 |
Eternal_pain

Anmeldungsdatum: 08.08.2006 Beiträge: 1783 Wohnort: BW/KA
|
Verfasst am: 01.08.2007, 13:27 Titel: |
|
|
ich kann nur vermutungen anstellen, aber ich glaube das ein String als Fixedlength uebergeben wird... wenn man also den String ueber die ursprungslaenge hinausschreibt duerfte es in etwa so sein als wenn man ueber einen vorher festgelegten reservierten speicherbereich hinausschreibt... und wozu das fuehrt ist ja bekant  _________________
 |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.08.2007, 13:31 Titel: |
|
|
Villeicht sogar über das Programm hinaus und in Andere bereiche des Speichers, das den Absturtz auslösen könnte.
Also doch ein Bug? _________________ Bis irgendwann...  |
|
Nach oben |
|
 |
AndT
Anmeldungsdatum: 02.04.2007 Beiträge: 481
|
Verfasst am: 01.08.2007, 15:11 Titel: |
|
|
Aus dem Englischen Forum:
Mico hat Folgendes geschrieben: | In the third FOR-NEXT loop use Size instead of Keylength-1. Size is the length of the string you're parsing by means of MID(), and its is 8 in your example. Keylength-1 is 1023 and that's the reason for the error. |
Lol die meinen echt das Keylength-1 der Fehler ist.
Bleibt nur die Frage wie die Daruf kommen xD _________________ Bis irgendwann...  |
|
Nach oben |
|
 |
|