Decompiler
SEE ist ein kleiner Decompiler nach F83.
Benutzung: SEE name
Er erzeugt ein Listing des Forth-Quellcodes. Bekannte CREATE-Strukturen werden korrekt entschlüsselt (Konstanten, Variablen, Colon-Definitionen etc.).
Beispiel:
: << OVER 0= NOT IF -1 SCROLL THEN ; SEE << : << 3121 OVER 3123 0= 3125 NOT 3127 ?BRANCH 3131 312B (LIT) -1 ( FFFF ) 312F SCROLL 3131 ;ok
Rückübersetzung:
(LIT) | entfällt |
;ok | ; |
(DO) .. (LOOP) | DO .. LOOP |
(?LEAVE) | ?LEAVE |
?BRANCH m1 .. m1: | IF .. THEN |
?BRANCH m1 .. BRANCH m2 m1: … m2: | IF .. ELSE .. THEN |
m1: .. ?BRANCH m1 | BEGIN .. UNTIL |
m1: .. ?BRANCH m2 .. BRANCH m1 m2: | BEGIN .. WHILE .. REPEAT |
m1: .. BRANCH m1 | BEGIN .. AGAIN |
IF +-- ?BRANCH m1 IF +---- ?BRANCH m1 ... | ... | THEN +-> m1: ELSE | +-- BRANCH m2 +-|-> m1: ... | THEN +-> m2: BEGIN +--> m1: BEGIN +--> m1: ... | ... | UNTIL +-- ?BRANCH m1 AGAIN +-- BRANCH m1 BEGIN +---> m1: ... | WHILE | +-- ?BRANCH m2 ... | | REPEAT +-|-- BRANCH m1 +-> m2:
REASS ist ein zugehöriger Reassembler.
Er bindest sich in SEE ein. SEE zeigt dann auch Code-Worte an:
1 GET REASS 1 22 THRU SEE COUNT COUNT is 0F70: POP HL 0F71: LD E,(HL) 0F72: LD D,00 0F74: INC HL 0F75: EX DE,HL 0F76: JP 0420 0F79: END ok
Durch Anpassen von (.PFA) kann die Ausgabe Forth-ähnlicher gestaltet werden. Allerdings ist es dann schwierig, Verzweigungen und Schleifen zu erkennen:
DECOMPILER DEFINITIONS : (.PFA) >BODY BEGIN DUP @ ?SPECIAL SPECIAL DUP 0= ?STOP OR UNTIL DROP ; ' (.PFA) IS .PFA