Deutsch
Forum

Bugreport / kleine Fehlerchen

 
- Seite 1 -



Ragnar
Rehbein
hallo IF !

auch wenn du im moment wichtigere sorgen hast, kurz 3 kleine fehlerchen:
1.
KompilierenMarkierenSeparieren
print "Hallo" ^
waitinput

bringt den XPSE zum absturz. das ^ ist mir aus versehen in den quelltext geraten (kleiner ausrutscher, den ich nicht bemerkt habe oder waren es die kinder ??? mit ihren süßen grabbelpfötchen ???).

2.
KompilierenMarkierenSeparieren
 {$batch copy "xx x.exe" "c:xx x.exe"}

ist nicht möglich. ich habe teilweise leerzeichen in den dateinamen bzw. pfadnamen. gibt es dafür eine lösung ?

3.
KompilierenMarkierenSeparieren
 $I debugprint.inc

includedateien werden ohne pfadangabe nicht gefunden, wenn sich die programmdatei in einem anderen verzeichnis befindet als XPSE.
m:ehbeinxprofan - XPSE und compiler
m:ehbeinxprofaninclude - z.b. debugprint.inc
m:ehbeinxprofanprojekteest - z.b. xxx.prf

ich benutze XPSE seit einiger zeit zu fast 100%.
neben den Compileroptionen die die arbeit erleichtern und beschleunigen, ist die .enh-datei das genialste. zu jeder programmversion die im einsatz ist hebe ich mir die entsprechende .enh-datei auf.
fehlermeldungen die sich auf eine zeilennummer beziehen, lassen sich so genial einfach finden.

toll daß es XPSE gibt

r.r.
 
19.01.2005  
 



 
- Seite 2 -



CB
ExceptionEAccessViolation im Modul profan.exe bei ...
Meintet Ihr das oder ist das ein anderer Fehler?
(Habe jetzt alle ^ im aktuellen Code rausgenommen)

Gruß, Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
11.02.2005  
 



[quote:7bc750c6e8=Christian Bernfeld]ExceptionEAccessViolation im Modul profan.exe bei ...
Meintet Ihr das oder ist das ein anderer Fehler?
(Habe jetzt alle ^ im aktuellen Code rausgenommen)

Gruß, Christian[/quote:7bc750c6e8]Im Modul Profan.exe? Das hätte dann nix mit dem XPSE mehr zu tun. Aus dem Code den Du mir PMt hast habe ich einfach alle ^ herausgenommen - und xpse hat sich nicht mehr beschwert. Den Bug werde ich aber natürlich entfernen.

Was läuft da jetzt bei Dir falsch?

Das mit den Assemblerblöcken ist was anderes - mit Franks XPIA im Zusammenhang mit dem XPSE kann man reines Assembler im Profansource anwenden - ich glaube aber du hast keine ASM-Passagen drin.

Salve, iF
 
11.02.2005  
 




Frank
Abbing
Hi,

es sieht wohl so aus, als würde XPSE den Code wieder und wieder durchsuchen. Hört gar nicht mehr damit auf, erzeugt aber keinen Fehler.
 
11.02.2005  
 



Aha - ich hatte was anderes Bemerkt - kannst Du mir dein Codepiece geben?

Salve, iF
 
11.02.2005  
 




Frank
Abbing
Hier ist er:
KompilierenMarkierenSeparieren
In diesem Democode befinden sich zwei Assemblerblöcke.
Eine versteckt sich in einer Profan-Prozedure und lädt eine Datei via API. Das ginge auch mittels Profan,
aber das hier ist ja ein Democode.
Der andere Assemblerblock zählt nach, wie oft die einzelnen Buchstaben (A-Z, bzw. a-z) in einer
Textdatei vorkommen.
 {$cleq}
Declare x&,y&,z&,text$,text#,tabelle#,bytes&
Prozedure mit Assemblerblock.
ReadFile dateiname$, Speicher wohin die Datei geladen werden soll, Offset im Speicher, Grösse der Datei

Proc ReadFile

    Parameters a1$,a2&,a3&,a4&
    ASM Block

    AsmStart ReadFileFast

        Parameters addr(a1$),a2&,a3&,a4&
        Return a3&
        jmp @F              ;Datenblock überspringen. @F/@@: ist eine Sondervariable genau für diesen Zweck. Kann in
        ;einem Block auch mehrmals verwendet werden.
        readed    dd  0
        handle    dd  0
        @@:
        invoke CreateFile,para1,GENERIC_READ,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0
        mov   handle,eax

        .if eax>0

            mov   eax,para2
            add   eax,para3
            invoke ReadFile,handle,eax,para4,addr readed,0
            invoke CloseHandle,handle
            mov   eax,readed

        .endif

    AsmEnd

    ASM Block Ende
    Return a3&

EndProc

Window 0,0-%maxx,%maxy
CLS
text$=@LoadFile$("Lade eine Textdatei","*.TXT")
x&=@FileSize(text$)

If x&>0

    Print text$
    Print Str$(x&)+" Bytes geladen."
    Print
    Print "Anzahl Buchstaben, die im Text gefunden wurden:"
    Dim text#,x&+1
    ReadFile text$,text#,0,x&
    x&=@&(0)
    bytes&=x&

    If x&

        Dim tabelle#,108  26 x 4 + 4
        Clear tabelle#
        ASM Block

        AsmStart Count

            Parameters text#,tabelle#,x&
            invoke CharUpperBuff,para1,para3
            mov ecx,para3
            mov ebx,para1
            mov edx,para2

            .repeat

                mov eax,0
                mov al,[ebx]
                inc ebx                         ;ebx um 1 erhöhen

                .if (al>=65) && (al<=90)

                    sub eax,65
                    shl eax,2                     ;logisches Verschieben der Bits nach links. Bewirkt: eax * 4. Schneller als "mul"
                    add eax,edx
                    mov edi,1
                    add [eax],edi

                .endif

                dec ecx

            .until ecx==0

        AsmEnd

        ASM Block Ende
        Decimals 2
        y&=0

        Whileloop 26

            x&=Long(tabelle#,y&*4)
            Print Chr$(y&+97)+" oder "+Chr$(y&+65)+" = "+Str$(x&)+" x."
            y&=y&+1

        EndWhile

        Dispose tabelle#

    EndIf

    Dispose text#

EndIf

WaitInput
End

Dieser Code produziert einen Anwendungsfehler:
KompilierenMarkierenSeparieren
 {$cleq}
Declare text$,passwort$,nurso$
text$="Zunächst einmal: Für Assembler benötigt man keine grosse Anzahl von Befehlen, mit 10 Befehlen "
text$=text$+"(insgesamt gibt es über 90) ist man schon gut bedient, alles andere ist unnütz, weil der "
text$=text$+"MASM32 Assembler High-Level-Syntax (.while / .endw / .if / .endif usw.) unterstützt."
text$=text$+"Und davon ist einem Profan-User schon das meiste bekannt."
passwort$="Ganz geheimes Passwort."
CLS
Print "Originaltext:"
Print
Color 7,15
Print text$
Color 0,15
Print
Print
ASM-Block
Crypt(), eine XOR-Verschlüsselung mittels Passwort
Übernommen aus meiner ProSpeed.dll
Parameter:
1) Bereichsvariable oder String, in der die Daten gespeichert sind.
2) Anzahl zu verschlüsselnder Bytes
3) Pointer auf einen String (oder Bereich), in dem das Passwort gespeichert ist
4) Länge des Passworts
Beim zweiten Aufruf mit den gleichen Parametern wird der ursprung wieder hergestellt.

AsmStart Crypt

    Parameters addr(text$),Len(text$),addr(passwort$),Len(passwort$)
    mov   ecx,para2
    mov   edx,para1
    mov   ebx,para3
    mov   esi,para4
    mov   edi,0
    schleife:
    mov   al,[edx]
    xor   al,[ebx+edi]
    mov   [edx],al
    inc   edx
    inc   edi
    cmp   esi,edi
    jne   sprung
    mov   edi,0
    sprung:
    sub   ecx,1
    jne   schleife

AsmEnd

Print "Verschlüsselter Text:"
Print
Color 7,15
Print text$
Color 0,15
Print
Print
Jetzt kommt eine Besonderheit...
Wir rufen unseren ersten ASM-Block ein zweites mal auf !!! Ohne Prozedure !
xpia$ ist der Name unserer kompletten Assemblerlibrary.
Crypt ist hier der Name des Assemblerblocks, danach folgen etventuelle Parameter.
Dabei ist es sogar egal, ob der zweite Aufruf nach dem Assemblerblock erfolgt oder schon davor !
Wer das jetzt nicht verstanden hat, der sollte den ASM-Block Crypt lieber in eine Profan-Prozedure
packen, und stattdessen lieber die Prozedure aufrufen. Aber so geht es auch.
External(xpia$,"Crypt",addr(text$),Len(text$),addr(passwort$),Len(passwort$))
Print "Und der wieder hergestellte Text:"
Print
Color 7,15
Print text$
WaitInput
End

Dieser hier produziert: Befehl unbekannt: While
KompilierenMarkierenSeparieren
 {$cleq}
Declare x&,y&,z&
Cls
x&=37

AsmStart Funktionsname1

    Parameters x&
    Return z&
    mov eax,0
    mov ebx,para1  ;oder [ebp+8]
    mov ecx,999999

    .while ecx!=0

        add eax,ebx
        dec ecx

    .endw

    ;Diese Assemblerroutine macht das gleiche wie:
    ;
    ;x&=0
    ;Whileloop 999999
    ;  x&=x&+37
    ;EndWhile
    ;
    ;Eine Schleife, die eine Millionen mal einen Wert addiert
    ;Dauer: XProfan = 18 Sekunden / XPIA = 1 Millisekunde

AsmEnd

Print "Addiere 999999 mal 37 = "+Str$(z&)
WaitInput
End

Anwendungsfehler:
KompilierenMarkierenSeparieren
 {$cleq}
Declare sum&,bereich#,text$
Cls

If 0

    AsmStart Checksumme

        Parameters addr(text$),Len(text$)
        mov ebx,para1
        mov esi,para2
        xor ecx,ecx
        xor edx,edx
        xor eax,eax

        .if esi>=0

            schleife:
            mov al,[ebx]
            add edx,eax
            add edx,ecx
            rol edx,8
            inc ecx
            inc ebx
            cmp ecx,esi
            jne schleife

        .endif

        mov eax,edx

    AsmEnd

EndIf

text$="Probestring. Man könnte auch einen Bereich angeben."
Print External(xpia$,"Checksumme",addr(text$),Len(text$))
text$="Probestring. Man könnte auch einen Bereich angeben"
Print External(xpia$,"Checksumme",addr(text$),Len(text$))
text$=" Probestring. Man könnte auch einen Bereich angeben."
Print External(xpia$,"Checksumme",addr(text$),Len(text$))
text$="Probestring. Mbn könnte auch einen Bereich angeben."
Print External(xpia$,"Checksumme",addr(text$),Len(text$))
text$="Probestring. Man könnte auch einen Bdreich angeben."
Print External(xpia$,"Checksumme",addr(text$),Len(text$))
Print
Dim bereich#,1000000
Clear bereich#
Print External(xpia$,"Checksumme",bereich#,1000000)
Byte bereich#,100=1
Print External(xpia$,"Checksumme",bereich#,1000000)
Dispose bereich#
WaitInput
End

Usw...
 
11.02.2005  
 




Frank
Abbing
Nochmal ich,

sorry, hatte mit einer nicht mehr aktuellen Version getestet. Die meißten Codes laufen jetzt. Mindestens ein Code erzeugt aber nach wie vor einen Fehler:
KompilierenMarkierenSeparieren
 {$cleq}
Declare dh&,text$,x&,y&,z&
 {$replace 1:"_Schleifen_enh"}
Def Schleife(1) !^1^,"Schleife"
dh&=usedll(xpia$)
CLS
Print xpia$
ASM-Block

If 0

    AsmStart Schleife

        Parameters x&
        mov ecx,para1   ;Unser Parameter, also 100 Millionen
        schleife:
        dec ecx         ;ecx=ecx-1
        jnz schleife    ;verzweige, wenn das zuletzt benutze Register (also ECX) nicht 0 ist
        mov eax,ebx

    AsmEnd

Endif

Warten, bis alle Laufwerke aus sind.
Noch aktive Laufwerke verfälschen den Geschwindigkeitstest.
Print
Print "3 Sekunden warten, bis alle Laufwerksaktivitäten versiegt sind."
Print
Sleep 3000
Assemblerschleife, 100 Millionen mal durchlaufen:
Wir benutzen unser generierte Dll im geladenen Zustand, weil allein
Profans Aufruf von "External" 16 Millisekunden für jede Ausführung benötigt...
x&=100000000
Print "Assemblerschleife wird jetzt "+Str$(x&)+" mal durchlaufen."
y&=&GetTickCount
Schleife(x&)
y&=&GetTickCount-y&
Print "Fertig in "+Str$(y&)+" Millisekunden."
Print
Profanschleife, 100 Millionen mal durchlaufen:
x&=100000000
Print "Profanschleife wird jetzt "+Str$(x&)+" mal durchlaufen."
y&=&GetTickCount

Whileloop x&

EndWhile

y&=&GetTickCount-y&
Print "Fertig in "+Str$(y&)+" Millisekunden."
WaitInput
freedll dh&
End
 
11.02.2005  
 



Ich habs grade getestet - läuft einwandfrei.

Ich hatte aber glaube vergessen zu erwähnen das Remarks via ; in ASM-Blöcken nicht mehr erlaubt sind. Dies ist die Vorbereitung zur ;-Zeilentrennung.

Vielleicht muddu die *DLL mal entfernen - also bei mir funzt es super jetzt.

Salve, iF
 
11.02.2005  
 




CB
[quote:ec61eef52b=iF][quote:ec61eef52b=Christian Bernfeld]ExceptionEAccessViolation im Modul profan.exe bei ...
Meintet Ihr das oder ist das ein anderer Fehler?
(Habe jetzt alle ^ im aktuellen Code rausgenommen)

Gruß, Christian[/quote:ec61eef52b]Im Modul Profan.exe? Das hätte dann nix mit dem XPSE mehr zu tun. Aus dem Code den Du mir PMt hast habe ich einfach alle ^ herausgenommen - und xpse hat sich nicht mehr beschwert. Den Bug werde ich aber natürlich entfernen.

Was läuft da jetzt bei Dir falsch?

Das mit den Assemblerblöcken ist was anderes - mit Franks XPIA im Zusammenhang mit dem XPSE kann man reines Assembler im Profansource anwenden - ich glaube aber du hast keine ASM-Passagen drin.

Salve, iF[/quote:ec61eef52b]
Nö, mit ASM hab ich (noch) nix am Hut.
Das komische ist nur, die .enh wird erstellt, das Prog startet normal, ich gebe eine Pat.-ID ein - Peng.
Wenn ich das gleiche über den Ver. 8 Interpreter mache, läufts normal.
Jetzt habe ich auch Ver. 9 (die letzte) probiert - da fliege ich auch mit einer Schutzverletzung raus!
Sieht fast so aus, als müßte ich Dir ein noch größeres Paket schnüren...
Oder hast Du eine andere Idee?

Gruß, Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
11.02.2005  
 



Kein größeres Packet. Einfach nur den Quellcode + enh. So müsste es gehen.

Aber wenn die P9 schon rausschmeist - ists wohl kein xpse-problem. Ich würde es mir jedoch trotzdem gerne anschauen.

Salve, iF
 
11.02.2005  
 




CB
Ok, kann ich Dir abends von zuhause aus schicken.

Etwas klüger bin ich mittlerweile:
Habe in alter Gewohnheit ein paar REM stehengelassen, korr.
Aber jetzt meckert der XProfan-Compiler 9: Stringende fehlt bei
KompilierenMarkierenSeparieren
Any idea?

Gruß, Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
11.02.2005  
 



Ja - bekannter DefBug vom P9.

Im aktuellen aber noch nicht herausgegebenen Release soll dies behoben sein.

Salve, iF
 
11.02.2005  
 




CB
Habe die Zeile mal testhalber auskommentiert, dann lief der Compilierungsprozeß durch, mit XPSE fliege ich aber immer noch aus meinem Prog raus (Interpretermodus)

Ich schick Dir doch mal den Code + Enh, Du findst da sicher schneller den (die)Fehler, obwohl auch der Profan2cpp nix meldet!
Mache mich mal auf den Heimweg.

Gruß, Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
11.02.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

23.552 Betrachtungen

Unbenanntvor 0 min.
Uwe Starke06.06.2023
Michael Borowiak15.11.2014
Roland Schäffer06.01.2011

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie