Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: robert 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
-
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.
-
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
-
Bist du dir sicher, dass der Fehler auch in dieser Funktion liegt (Hast du mal einen Debugger drüberlaufen lassen) ???