1686 lines
32 KiB
Plaintext
1686 lines
32 KiB
Plaintext
|
|
# Core program
|
|
|
|
# Defining function exit
|
|
:FUNCTION_exit
|
|
pop_ebx
|
|
pop_ebx
|
|
mov_eax, %1
|
|
int !0x80
|
|
ret
|
|
# Defining function fgetc
|
|
:FUNCTION_fgetc
|
|
mov_eax, %3
|
|
lea_ebx,[esp+DWORD] %4
|
|
mov_ebx,[ebx]
|
|
push_ebx
|
|
mov_ecx,esp
|
|
mov_edx, %1
|
|
int !0x80
|
|
test_eax,eax
|
|
pop_eax
|
|
jne %FUNCTION_fgetc_Done
|
|
mov_eax, %-1
|
|
:FUNCTION_fgetc_Done
|
|
ret
|
|
# Defining function fputc
|
|
:FUNCTION_fputc
|
|
mov_eax, %4
|
|
lea_ebx,[esp+DWORD] %4
|
|
mov_ebx,[ebx]
|
|
lea_ecx,[esp+DWORD] %8
|
|
mov_edx, %1
|
|
int !0x80
|
|
ret
|
|
# Defining function open
|
|
:FUNCTION_open
|
|
lea_ebx,[esp+DWORD] %12
|
|
mov_ebx,[ebx]
|
|
lea_ecx,[esp+DWORD] %8
|
|
mov_ecx,[ecx]
|
|
lea_edx,[esp+DWORD] %4
|
|
mov_edx,[edx]
|
|
mov_eax, %5
|
|
int !0x80
|
|
ret
|
|
# Defining function fopen
|
|
:FUNCTION_fopen
|
|
# Defining local f
|
|
push_eax #f
|
|
# IF_0
|
|
|
|
mov_eax, %119
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %0
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
movsx_eax,BYTE_PTR_[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_0
|
|
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, %577
|
|
push_eax #_process_expression2
|
|
mov_eax, %384
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_open
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %_END_IF_0
|
|
|
|
:ELSE_0
|
|
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, %0
|
|
push_eax #_process_expression2
|
|
mov_eax, %0
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_open
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
:_END_IF_0
|
|
|
|
# IF_1
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setg_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_1
|
|
mov_eax, %0
|
|
pop_ebx # _return_result_locals
|
|
ret
|
|
jmp %_END_IF_1
|
|
:ELSE_1
|
|
:_END_IF_1
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
pop_ebx # _return_result_locals
|
|
ret
|
|
# Defining function close
|
|
:FUNCTION_close
|
|
lea_ebx,[esp+DWORD] %4
|
|
mov_eax, %6
|
|
int !0x80
|
|
ret
|
|
# Defining function fclose
|
|
:FUNCTION_fclose
|
|
# Defining local error
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_close
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #error
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
pop_ebx # _return_result_locals
|
|
ret
|
|
# Defining function file_print
|
|
:FUNCTION_file_print
|
|
:WHILE_0
|
|
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %0
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
movsx_eax,BYTE_PTR_[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %END_WHILE_0
|
|
|
|
# THEN_while_0
|
|
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %0
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
movsx_eax,BYTE_PTR_[eax]
|
|
push_eax #_process_expression1
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_fputc
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
lea_eax,[esp+DWORD] %8
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %WHILE_0
|
|
|
|
:END_WHILE_0
|
|
|
|
ret
|
|
# Defining function malloc
|
|
:FUNCTION_malloc
|
|
mov_eax,[esp+DWORD] %4
|
|
push_eax
|
|
mov_eax, %45
|
|
mov_ebx, %0
|
|
int !0x80
|
|
pop_ebx
|
|
add_ebx,eax
|
|
push_eax
|
|
push_ebx
|
|
mov_eax, %45
|
|
int !0x80
|
|
pop_ebx
|
|
cmp
|
|
pop_eax
|
|
je %FUNCTION_malloc_Done
|
|
mov_eax, %-1
|
|
:FUNCTION_malloc_Done
|
|
ret
|
|
# Defining function memset
|
|
:FUNCTION_memset
|
|
# Defining local s
|
|
push_eax #s
|
|
# FOR_initialization_0
|
|
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %20
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
:FOR_0
|
|
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setl_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %FOR_END_0
|
|
|
|
jmp %FOR_THEN_0
|
|
|
|
:FOR_ITER_0
|
|
|
|
lea_eax,[esp+DWORD] %8
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
sub_ebx,eax
|
|
mov_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %FOR_0
|
|
|
|
:FOR_THEN_0
|
|
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %0
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],al
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %FOR_ITER_0
|
|
|
|
:FOR_END_0
|
|
|
|
pop_ebx # _recursive_statement_locals
|
|
ret
|
|
# Defining function calloc
|
|
:FUNCTION_calloc
|
|
# Defining local ret
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
imul_ebx
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_malloc
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #ret
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, %0
|
|
push_eax #_process_expression2
|
|
lea_eax,[esp+DWORD] %20
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %20
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
imul_ebx
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_memset
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
pop_ebx # _return_result_locals
|
|
ret
|
|
# Defining function free
|
|
:FUNCTION_free
|
|
ret
|
|
# Defining function match
|
|
:FUNCTION_match
|
|
# Defining local i
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
sub_ebx,eax
|
|
mov_eax,ebx
|
|
push_eax #i
|
|
:DO_0
|
|
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
# IF_2
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
movsx_eax,BYTE_PTR_[eax]
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
movsx_eax,BYTE_PTR_[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_2
|
|
mov_eax, %0
|
|
pop_ebx # _return_result_locals
|
|
ret
|
|
jmp %_END_IF_2
|
|
:ELSE_2
|
|
:_END_IF_2
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
movsx_eax,BYTE_PTR_[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
push_eax #_common_recursion
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
movsx_eax,BYTE_PTR_[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
pop_ebx # _common_recursion
|
|
and_eax,ebx
|
|
test_eax,eax
|
|
jne %DO_0
|
|
|
|
:DO_END_0
|
|
|
|
mov_eax, %1
|
|
pop_ebx # _return_result_locals
|
|
ret
|
|
# Defining function consume_token
|
|
:FUNCTION_consume_token
|
|
# Defining local i
|
|
mov_eax, %0
|
|
push_eax #i
|
|
# Defining local c
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_fgetc
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #c
|
|
:DO_1
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],al
|
|
lea_eax,[esp+DWORD] %4
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %20
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_fgetc
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
mov_eax, %32
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
push_eax #_common_recursion
|
|
mov_eax, %9
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
pop_ebx # _common_recursion
|
|
and_eax,ebx
|
|
push_eax #_common_recursion
|
|
mov_eax, %10
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
pop_ebx # _common_recursion
|
|
and_eax,ebx
|
|
push_eax #_common_recursion
|
|
mov_eax, %62
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
pop_ebx # _common_recursion
|
|
and_eax,ebx
|
|
test_eax,eax
|
|
jne %DO_1
|
|
:DO_END_1
|
|
pop_ebx # _recursive_statement_locals
|
|
pop_ebx # _recursive_statement_locals
|
|
ret
|
|
# Defining function storeLabel
|
|
:FUNCTION_storeLabel
|
|
# Defining local entry
|
|
mov_eax, %1
|
|
push_eax #_process_expression1
|
|
mov_eax, %8
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_calloc
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #entry
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
push_eax #_common_recursion
|
|
mov_eax, &GLOBAL_jump_table
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
mov_eax, &GLOBAL_jump_table
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
push_eax #_common_recursion
|
|
mov_eax, %4096
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
push_eax #_process_expression1
|
|
mov_eax, %1
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_calloc
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_consume_token
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
# IF_3
|
|
mov_eax, %95
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %0
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
movsx_eax,BYTE_PTR_[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_3
|
|
mov_eax, &GLOBAL_jump_table
|
|
push_eax #_common_recursion
|
|
mov_eax, &GLOBAL_jump_table
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %_END_IF_3
|
|
:ELSE_3
|
|
:_END_IF_3
|
|
pop_ebx # _recursive_statement_locals
|
|
ret
|
|
# Defining function line_Comment
|
|
:FUNCTION_line_Comment
|
|
# Defining local c
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_fgetc
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #c
|
|
:WHILE_1
|
|
mov_eax, %10
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
push_eax #_common_recursion
|
|
mov_eax, %13
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
pop_ebx # _common_recursion
|
|
and_eax,ebx
|
|
test_eax,eax
|
|
je %END_WHILE_1
|
|
# THEN_while_1
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_fgetc
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %WHILE_1
|
|
:END_WHILE_1
|
|
pop_ebx # _recursive_statement_locals
|
|
ret
|
|
# Defining function purge_string
|
|
:FUNCTION_purge_string
|
|
# Defining local c
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_fgetc
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #c
|
|
:WHILE_2
|
|
mov_eax, %0xFFFFFFFF
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
push_eax #_common_recursion
|
|
mov_eax, %34
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
pop_ebx # _common_recursion
|
|
and_eax,ebx
|
|
test_eax,eax
|
|
je %END_WHILE_2
|
|
# THEN_while_2
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_fgetc
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %WHILE_2
|
|
:END_WHILE_2
|
|
pop_ebx # _recursive_statement_locals
|
|
ret
|
|
# Defining function first_pass
|
|
:FUNCTION_first_pass
|
|
# IF_4
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_4
|
|
ret
|
|
jmp %_END_IF_4
|
|
:ELSE_4
|
|
:_END_IF_4
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_first_pass
|
|
pop_ebx # _process_expression_locals
|
|
# Defining local source_file
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_0
|
|
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_fopen
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #source_file
|
|
# IF_5
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_5
|
|
mov_eax, &STRING_1
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &STRING_2
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, %1
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_exit
|
|
pop_ebx # _process_expression_locals
|
|
jmp %_END_IF_5
|
|
:ELSE_5
|
|
:_END_IF_5
|
|
# Defining local c
|
|
push_eax #c
|
|
# FOR_initialization_1
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_fgetc
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
:FOR_1
|
|
mov_eax, %0xFFFFFFFF
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %FOR_END_1
|
|
jmp %FOR_THEN_1
|
|
:FOR_ITER_1
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_fgetc
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %FOR_1
|
|
:FOR_THEN_1
|
|
# IF_6
|
|
mov_eax, %58
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_6
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_storeLabel
|
|
pop_ebx # _process_expression_locals
|
|
jmp %_END_IF_6
|
|
:ELSE_6
|
|
# IF_7
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %35
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %59
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
pop_ebx # _common_recursion
|
|
or_eax,ebx
|
|
test_eax,eax
|
|
je %ELSE_7
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_line_Comment
|
|
pop_ebx # _process_expression_locals
|
|
jmp %_END_IF_7
|
|
:ELSE_7
|
|
# IF_8
|
|
mov_eax, %34
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_8
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_purge_string
|
|
pop_ebx # _process_expression_locals
|
|
jmp %_END_IF_8
|
|
:ELSE_8
|
|
:_END_IF_8
|
|
:_END_IF_7
|
|
:_END_IF_6
|
|
jmp %FOR_ITER_1
|
|
:FOR_END_1
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_fclose
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _recursive_statement_locals
|
|
pop_ebx # _recursive_statement_locals
|
|
ret
|
|
# Defining function output_debug
|
|
:FUNCTION_output_debug
|
|
# Defining local i
|
|
push_eax #i
|
|
# FOR_initialization_2
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
:FOR_2
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %FOR_END_2
|
|
jmp %FOR_THEN_2
|
|
:FOR_ITER_2
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %FOR_2
|
|
:FOR_THEN_2
|
|
# IF_9
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
test_eax,eax
|
|
je %ELSE_9
|
|
mov_eax, &STRING_3
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &STRING_4
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &STRING_5
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
jmp %_END_IF_9
|
|
:ELSE_9
|
|
mov_eax, &STRING_6
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &STRING_7
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &STRING_8
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
:_END_IF_9
|
|
jmp %FOR_ITER_2
|
|
:FOR_END_2
|
|
pop_ebx # _recursive_statement_locals
|
|
ret
|
|
# Defining function reverse_list
|
|
:FUNCTION_reverse_list
|
|
# Defining local root
|
|
mov_eax, %0
|
|
push_eax #root
|
|
# Defining local next
|
|
push_eax #next
|
|
:WHILE_3
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setne_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %END_WHILE_3
|
|
# THEN_while_3
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
lea_eax,[esp+DWORD] %4
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
lea_eax,[esp+DWORD] %12
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %WHILE_3
|
|
:END_WHILE_3
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _return_result_locals
|
|
pop_ebx # _return_result_locals
|
|
ret
|
|
# Defining function main
|
|
:FUNCTION_main
|
|
mov_eax, &GLOBAL_jump_table
|
|
push_eax #_common_recursion
|
|
mov_eax, %0
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
# Defining local input
|
|
mov_eax, %0
|
|
push_eax #input
|
|
mov_eax, &GLOBAL_output
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
# Defining local output_file
|
|
mov_eax, &STRING_9
|
|
push_eax #output_file
|
|
# Defining local option_index
|
|
mov_eax, %1
|
|
push_eax #option_index
|
|
:WHILE_4
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %20
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
setle_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %END_WHILE_4
|
|
# THEN_while_4
|
|
# IF_10
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %24
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_10
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %_END_IF_10
|
|
:ELSE_10
|
|
# IF_11
|
|
lea_eax,[esp+DWORD] %20
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_10
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_match
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %24
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_11
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_match
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
or_eax,ebx
|
|
test_eax,eax
|
|
je %ELSE_11
|
|
mov_eax, &STRING_12
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
lea_eax,[esp+DWORD] %20
|
|
push_eax #_common_recursion
|
|
mov_eax, %0
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &STRING_13
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, %0
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_exit
|
|
pop_ebx # _process_expression_locals
|
|
jmp %_END_IF_11
|
|
:ELSE_11
|
|
# IF_12
|
|
lea_eax,[esp+DWORD] %20
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_14
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_match
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %24
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_15
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_match
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
or_eax,ebx
|
|
test_eax,eax
|
|
je %ELSE_12
|
|
# Defining local temp
|
|
mov_eax, %1
|
|
push_eax #_process_expression1
|
|
mov_eax, %8
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_calloc
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #temp
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %28
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %16
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
lea_eax,[esp+DWORD] %12
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
lea_eax,[esp+DWORD] %4
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %2
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
pop_ebx # _recursive_statement_locals
|
|
jmp %_END_IF_12
|
|
:ELSE_12
|
|
# IF_13
|
|
lea_eax,[esp+DWORD] %20
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_16
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_match
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %24
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_17
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_match
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
or_eax,ebx
|
|
test_eax,eax
|
|
je %ELSE_13
|
|
lea_eax,[esp+DWORD] %4
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %24
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %1
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
mov_eax, &GLOBAL_output
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_18
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_fopen
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
# IF_14
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_14
|
|
mov_eax, &STRING_19
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
# looking up offset
|
|
# -> offset calculation
|
|
mov_ebx, %4
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &STRING_20
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, %1
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_exit
|
|
pop_ebx # _process_expression_locals
|
|
jmp %_END_IF_14
|
|
:ELSE_14
|
|
:_END_IF_14
|
|
lea_eax,[esp+DWORD] %0
|
|
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
push_eax #_common_recursion
|
|
mov_eax, %2
|
|
pop_ebx # _common_recursion
|
|
add_eax,ebx
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
jmp %_END_IF_13
|
|
:ELSE_13
|
|
# IF_15
|
|
lea_eax,[esp+DWORD] %20
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %4
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_21
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_match
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %24
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
sal_eax, !2
|
|
add_eax,ebx
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, &STRING_22
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_match
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
or_eax,ebx
|
|
test_eax,eax
|
|
je %ELSE_15
|
|
mov_eax, &STRING_23
|
|
push_eax #_process_expression1
|
|
mov_eax, %1
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, %0
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_exit
|
|
pop_ebx # _process_expression_locals
|
|
jmp %_END_IF_15
|
|
:ELSE_15
|
|
mov_eax, &STRING_24
|
|
push_eax #_process_expression1
|
|
mov_eax, %2
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, %1
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_exit
|
|
pop_ebx # _process_expression_locals
|
|
:_END_IF_15
|
|
:_END_IF_13
|
|
:_END_IF_12
|
|
:_END_IF_11
|
|
:_END_IF_10
|
|
jmp %WHILE_4
|
|
:END_WHILE_4
|
|
# IF_16
|
|
mov_eax, %0
|
|
push_eax #_common_recursion
|
|
lea_eax,[esp+DWORD] %12
|
|
mov_eax,[eax]
|
|
pop_ebx # _common_recursion
|
|
cmp
|
|
sete_al
|
|
movzx_eax,al
|
|
test_eax,eax
|
|
je %ELSE_16
|
|
mov_eax, %1
|
|
pop_ebx # _return_result_locals
|
|
pop_ebx # _return_result_locals
|
|
pop_ebx # _return_result_locals
|
|
ret
|
|
jmp %_END_IF_16
|
|
:ELSE_16
|
|
:_END_IF_16
|
|
lea_eax,[esp+DWORD] %8
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_first_pass
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &GLOBAL_jump_table
|
|
push_eax #_common_recursion
|
|
mov_eax, &GLOBAL_jump_table
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
call %FUNCTION_reverse_list
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _common_recursion
|
|
mov_[ebx],eax
|
|
mov_eax, &STRING_25
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &GLOBAL_jump_table
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, %1
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_output_debug
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &STRING_26
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &GLOBAL_jump_table
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression1
|
|
mov_eax, %0
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_output_debug
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, &STRING_27
|
|
push_eax #_process_expression1
|
|
mov_eax, &GLOBAL_output
|
|
mov_eax,[eax]
|
|
push_eax #_process_expression2
|
|
call %FUNCTION_file_print
|
|
pop_ebx # _process_expression_locals
|
|
pop_ebx # _process_expression_locals
|
|
mov_eax, %0
|
|
pop_ebx # _return_result_locals
|
|
pop_ebx # _return_result_locals
|
|
pop_ebx # _return_result_locals
|
|
ret
|
|
|
|
# Program global variables
|
|
|
|
:GLOBAL_output
|
|
NULL
|
|
:GLOBAL_jump_table
|
|
NULL
|
|
|
|
# Program strings
|
|
|
|
:STRING_0
|
|
|
|
"r"
|
|
:STRING_1
|
|
"The file: "
|
|
:STRING_2
|
|
" can not be opened!
|
|
"
|
|
:STRING_3
|
|
' 3A 45 4C 46 5F 73 74 72 5F 00'
|
|
:STRING_4
|
|
' 0A 22 00'
|
|
:STRING_5
|
|
' 22 0A 00'
|
|
:STRING_6
|
|
"%ELF_str_"
|
|
:STRING_7
|
|
">ELF_str
|
|
&"
|
|
:STRING_8
|
|
"
|
|
%10000
|
|
!2
|
|
!0
|
|
@1
|
|
"
|
|
:STRING_9
|
|
""
|
|
:STRING_10
|
|
"-h"
|
|
:STRING_11
|
|
"--help"
|
|
:STRING_12
|
|
"Usage: "
|
|
:STRING_13
|
|
" -f FILENAME1 {-f FILENAME2}
|
|
"
|
|
:STRING_14
|
|
"-f"
|
|
:STRING_15
|
|
"--file"
|
|
:STRING_16
|
|
"-o"
|
|
:STRING_17
|
|
"--output"
|
|
:STRING_18
|
|
"w"
|
|
:STRING_19
|
|
"The file: "
|
|
:STRING_20
|
|
" can not be opened!
|
|
"
|
|
:STRING_21
|
|
"-V"
|
|
:STRING_22
|
|
"--version"
|
|
:STRING_23
|
|
"blood-elf 0.1
|
|
(Basically Launches Odd Object Dump ExecutabLe Files
|
|
"
|
|
:STRING_24
|
|
"Unknown option
|
|
"
|
|
:STRING_25
|
|
' 3A 45 4C 46 5F 73 74 72 0A 21 30 0A 00'
|
|
:STRING_26
|
|
' 25 30 0A 3A 45 4C 46 5F 73 79 6D 0A 25 30 0A 25 30 0A 25 30 0A 21 30 0A 21 30 0A 40 31 0A 00'
|
|
:STRING_27
|
|
' 0A 3A 45 4C 46 5F 65 6E 64 0A 00'
|
|
|
|
:ELF_end
|