Autor Thema: kein Ausweg aus der Endlosschleife  (Gelesen 2937 mal)

robert

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« am: 04. July 2004, 13:14 »
Hi,

also damit ihr es versteht erstmal die code-brocken.

arguments:
    pop        ebx
    ...
    mov    ecx,ebx            ; second argument of sys_write ( buf )
    lea        esi, [ecx]
    jmp     stringl
        ...
        ret

stringl:
    xor      eax, eax            ; eax auf null setzen
    .Loop:        
    cmp    byte [esi], 0            ; mit null vergleichen
    jz    .End                    ; wenn null dann Ende
    inc    esi                     ; ungleich null dann buchstaben weiter
    inc    eax                     ; und count fuer stringlaenge erhoehen
    jmp .Loop
       
    .End:
    inc        eax
        ret                                       ; ## Hier ist wahrscheinlich das Problem. Es sollte aus stringl  herausspringen aber es springt so wie ich mir das ueberlegt habe zu Loop zurueck.

Wie kann ich nun bewerkstelligen das er vollkommen aus stringl springt?

\\Robert

TeeJay

  • Beiträge: 630
    • Profil anzeigen
    • http://www.jay-code.de
Gespeichert
« Antwort #1 am: 04. July 2004, 13:25 »
das liegt daran das du deine Funktion "string" über jmp aufrufst!

Du musst das aber mit "call" aufrufen.


Nur dann werden die Informationen die "ret" benötigt um wieder zurückuspringen auf den Stack gepusht.

jmp springt nur zu der Funkiton OHNE etwas auf den Stack zu pushen.
----------------------
Redakteur bei LowLevel

robert

  • Beiträge: 9
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 04. July 2004, 15:56 »
achso, ja das jmp war von mir eh allgemein ein fehler aber das war nicht so, ist noch von einer umstrukturierung uebrig geblieben.

also wenn man sich jetzt vorstellt da steht call stringl     ...hab ich immer noch das problem

chr15

  • Beiträge: 279
    • Profil anzeigen
    • http://www.clinux.de.vu
Gespeichert
« Antwort #3 am: 04. July 2004, 19:23 »
Bist du dir sicher, dass der Fehler auch in dieser Funktion liegt (Hast du mal einen Debugger drüberlaufen lassen) ???

 

Einloggen