Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Parser

1 view
Skip to first unread message

Jens Kallup

unread,
Jul 20, 2014, 5:44:30 AM7/20/14
to
Hallo Gemeinde,

wo steckn der FehlerTeufel im code?
mit ollydbg bin ich nicht weiter gekommen, der Debugger freezt sich ein:
http://postimg.org/image/65qm8etl5/

hier der original code:

proc getchar
mov ebx,[pos_counter]
add ebx,1
mov [pos_counter],ebx
mov eax,[sourceAlloc]
movsx eax,byte [eax+ebx] ; add index + edi

mov [current_char],eax
mov ebx,[current_pos]
add ebx,1
mov [current_pos],ebx
mov dword [current_token+ebx],eax
mov dword [current_token+ebx+1],0 ; null terminated
.finish:
leave
ret
endp


proc skip_white_space
.nextchar:
mov [current_pos],-1
call getchar

;-----------------------------------------
; first, handle all white space char's ...
;-----------------------------------------
cmp [current_char],0
je .finish
cmp [current_char],9
je .nextchar
cmp [current_char],13
je .nextchar
cmp [current_char],32
je .nextchar

;---------------------------------------------------
; then, lookup, if alpha or number char is found ...
;---------------------------------------------------
cmp [current_char],57
jle .digit9
jmp .finish

.digit9:
invoke MessageBox,[MainWindow.hwnd],current_token,_error_text,3
call getchar

cmp [current_char],57
jle .digit9
jmp .finish

.finish:
invoke MessageBox,[MainWindow.hwnd],current_token,_error_text,3
ret
endp



Gru�
Jens


Bernhard Schornak

unread,
Sep 28, 2017, 9:24:46 AM9/28/17
to
Jens Kallup schrieb:


> Hallo Gemeinde,
>
> wo steckn der FehlerTeufel im code?
> mit ollydbg bin ich nicht weiter gekommen, der Debugger freezt sich ein:
> http://postimg.org/image/65qm8etl5/
>
> hier der original code:
>
> proc getchar
> mov ebx,[pos_counter]
> add ebx,1
> mov [pos_counter],ebx
> mov eax,[sourceAlloc]
> movsx eax,byte [eax+ebx] ; add index + edi
>
> mov [current_char],eax
> mov ebx,[current_pos]
> add ebx,1
> mov [current_pos],ebx
> mov dword [current_token+ebx],eax
> mov dword [current_token+ebx+1],0 ; null terminated
> .finish:
> leave
> ret
> endp


LEAVE macht Folgendes:

MOV ESP, EBP
POP EBP

Sollte im *nicht* geposten Code kein ENTER, respektive

PUSH EBP
MOV EBP, ESP

vorkommen, dürfte der Stackpointer nach dem LEAVE etwas "verbogen"
sein, und so möglicherweise auf ein nicht alloziertes Offset zu SS
zeigen.

Hier findest Du ein paar nützliche String-Funktionen

https://github.com/BernhardSchornak/st-open/blob/master/LIB/SOURCES/core/str.S

(sollten sich problemlos auf 16 oder 32 Bit downgraden lassen).


Grüsse aus Augsburg

Bernhard Schornak
0 new messages