mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-17 12:22:35 +03:00
fasm 1.69.34 - It's works but need check
git-svn-id: svn://kolibrios.org@2287 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
1d24b843ac
commit
61dfe6eeec
@ -1,14 +1,15 @@
|
|||||||
|
|
||||||
; flat assembler core
|
; flat assembler core
|
||||||
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
; Copyright (c) 1999-2011, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
|
|
||||||
assembler:
|
assembler:
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
mov [stub_size],eax
|
mov [stub_size],eax
|
||||||
mov [number_of_sections],eax
|
|
||||||
mov [current_pass],ax
|
mov [current_pass],ax
|
||||||
mov [resolver_flags],eax
|
mov [resolver_flags],eax
|
||||||
|
mov [number_of_sections],eax
|
||||||
|
mov [actual_fixups_size],eax
|
||||||
assembler_loop:
|
assembler_loop:
|
||||||
mov eax,[labels_list]
|
mov eax,[labels_list]
|
||||||
mov [display_buffer],eax
|
mov [display_buffer],eax
|
||||||
@ -115,6 +116,14 @@ assembler:
|
|||||||
or eax,eax
|
or eax,eax
|
||||||
jz assemble_ok
|
jz assemble_ok
|
||||||
mov [current_line],eax
|
mov [current_line],eax
|
||||||
|
cmp [error],undefined_symbol
|
||||||
|
jne error_confirmed
|
||||||
|
mov eax,[error_info]
|
||||||
|
or eax,eax
|
||||||
|
jz error_confirmed
|
||||||
|
test byte [eax+8],1
|
||||||
|
jnz next_pass
|
||||||
|
error_confirmed:
|
||||||
call error_handler
|
call error_handler
|
||||||
error_handler:
|
error_handler:
|
||||||
mov eax,[error]
|
mov eax,[error]
|
||||||
@ -360,10 +369,13 @@ assemble_line:
|
|||||||
; mov [operand_size],0
|
; mov [operand_size],0
|
||||||
; mov [size_override],0
|
; mov [size_override],0
|
||||||
; mov [operand_prefix],0
|
; mov [operand_prefix],0
|
||||||
; mov [rex_prefix],0
|
; mov [opcode_prefix],0
|
||||||
mov dword [operand_size],0
|
mov dword [operand_size],0
|
||||||
mov [opcode_prefix],0
|
; mov [rex_prefix],0
|
||||||
mov [immediate_size],0
|
; mov [vex_required],0
|
||||||
|
; mov [vex_register],0
|
||||||
|
; mov [immediate_size],0
|
||||||
|
mov dword [rex_prefix],0
|
||||||
call instruction_handler
|
call instruction_handler
|
||||||
instruction_handler:
|
instruction_handler:
|
||||||
movzx ebx,word [esi]
|
movzx ebx,word [esi]
|
||||||
@ -384,87 +396,6 @@ assemble_line:
|
|||||||
dec esi
|
dec esi
|
||||||
stc
|
stc
|
||||||
ret
|
ret
|
||||||
skip_line:
|
|
||||||
call skip_symbol
|
|
||||||
jnc skip_line
|
|
||||||
ret
|
|
||||||
skip_symbol:
|
|
||||||
lods byte [esi]
|
|
||||||
or al,al
|
|
||||||
jz nothing_to_skip
|
|
||||||
cmp al,0Fh
|
|
||||||
je nothing_to_skip
|
|
||||||
cmp al,1
|
|
||||||
je skip_instruction
|
|
||||||
cmp al,2
|
|
||||||
je skip_label
|
|
||||||
cmp al,3
|
|
||||||
je skip_label
|
|
||||||
cmp al,20h
|
|
||||||
jb skip_assembler_symbol
|
|
||||||
cmp al,'('
|
|
||||||
je skip_expression
|
|
||||||
cmp al,'['
|
|
||||||
je skip_address
|
|
||||||
skip_done:
|
|
||||||
clc
|
|
||||||
ret
|
|
||||||
skip_label:
|
|
||||||
add esi,2
|
|
||||||
skip_instruction:
|
|
||||||
add esi,2
|
|
||||||
skip_assembler_symbol:
|
|
||||||
inc esi
|
|
||||||
jmp skip_done
|
|
||||||
skip_address:
|
|
||||||
mov al,[esi]
|
|
||||||
and al,11110000b
|
|
||||||
cmp al,60h
|
|
||||||
jb skip_expression
|
|
||||||
cmp al,70h
|
|
||||||
ja skip_expression
|
|
||||||
inc esi
|
|
||||||
jmp skip_address
|
|
||||||
skip_expression:
|
|
||||||
lods byte [esi]
|
|
||||||
or al,al
|
|
||||||
jz skip_string
|
|
||||||
cmp al,'.'
|
|
||||||
je skip_fp_value
|
|
||||||
cmp al,')'
|
|
||||||
je skip_done
|
|
||||||
cmp al,']'
|
|
||||||
je skip_done
|
|
||||||
cmp al,'!'
|
|
||||||
je skip_expression
|
|
||||||
cmp al,0Fh
|
|
||||||
je skip_expression
|
|
||||||
cmp al,10h
|
|
||||||
je skip_register
|
|
||||||
cmp al,11h
|
|
||||||
je skip_label_value
|
|
||||||
cmp al,80h
|
|
||||||
jae skip_expression
|
|
||||||
movzx eax,al
|
|
||||||
add esi,eax
|
|
||||||
jmp skip_expression
|
|
||||||
skip_label_value:
|
|
||||||
add esi,3
|
|
||||||
skip_register:
|
|
||||||
inc esi
|
|
||||||
jmp skip_expression
|
|
||||||
skip_fp_value:
|
|
||||||
add esi,12
|
|
||||||
jmp skip_done
|
|
||||||
skip_string:
|
|
||||||
lods dword [esi]
|
|
||||||
add esi,eax
|
|
||||||
inc esi
|
|
||||||
jmp skip_done
|
|
||||||
nothing_to_skip:
|
|
||||||
dec esi
|
|
||||||
stc
|
|
||||||
ret
|
|
||||||
|
|
||||||
org_directive:
|
org_directive:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
@ -576,7 +507,6 @@ label_directive:
|
|||||||
mov [ebx+4],edx
|
mov [ebx+4],edx
|
||||||
setne al
|
setne al
|
||||||
or ah,al
|
or ah,al
|
||||||
jmp finish_label
|
|
||||||
finish_label:
|
finish_label:
|
||||||
cmp cl,[ebx+10]
|
cmp cl,[ebx+10]
|
||||||
mov [ebx+10],cl
|
mov [ebx+10],cl
|
||||||
@ -818,15 +748,9 @@ times_directive:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne times_value_ok
|
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
times_value_ok:
|
|
||||||
cmp eax,0
|
cmp eax,0
|
||||||
je zero_times
|
je zero_times
|
||||||
jl negative_times
|
|
||||||
cmp byte [esi],':'
|
cmp byte [esi],':'
|
||||||
jne times_argument_ok
|
jne times_argument_ok
|
||||||
inc esi
|
inc esi
|
||||||
@ -855,14 +779,9 @@ times_directive:
|
|||||||
pop [counter_limit]
|
pop [counter_limit]
|
||||||
pop [counter]
|
pop [counter]
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
negative_times:
|
|
||||||
cmp [error_line],0
|
|
||||||
jne zero_times
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],invalid_value
|
|
||||||
zero_times:
|
zero_times:
|
||||||
call skip_line
|
call skip_symbol
|
||||||
|
jnc zero_times
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
|
|
||||||
virtual_directive:
|
virtual_directive:
|
||||||
@ -973,13 +892,15 @@ virtual_directive:
|
|||||||
mov edi,[ebx+8]
|
mov edi,[ebx+8]
|
||||||
remove_structure_data:
|
remove_structure_data:
|
||||||
push esi edi
|
push esi edi
|
||||||
mov esi,[structures_buffer]
|
|
||||||
mov ecx,ebx
|
mov ecx,ebx
|
||||||
sub ecx,esi
|
sub ecx,[structures_buffer]
|
||||||
lea edi,[esi+20h]
|
|
||||||
mov [structures_buffer],edi
|
|
||||||
shr ecx,2
|
shr ecx,2
|
||||||
|
lea esi,[ebx-4]
|
||||||
|
lea edi,[esi+20h]
|
||||||
|
std
|
||||||
rep movs dword [edi],[esi]
|
rep movs dword [edi],[esi]
|
||||||
|
cld
|
||||||
|
add [structures_buffer],20h
|
||||||
pop edi esi
|
pop edi esi
|
||||||
ret
|
ret
|
||||||
repeat_directive:
|
repeat_directive:
|
||||||
@ -990,15 +911,9 @@ repeat_directive:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne repeat_value_ok
|
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
repeat_value_ok:
|
|
||||||
cmp eax,0
|
cmp eax,0
|
||||||
je zero_repeat
|
je zero_repeat
|
||||||
jl negative_repeat
|
|
||||||
call allocate_structure_data
|
call allocate_structure_data
|
||||||
mov word [ebx],repeat_directive-instruction_handler
|
mov word [ebx],repeat_directive-instruction_handler
|
||||||
xchg eax,[counter_limit]
|
xchg eax,[counter_limit]
|
||||||
@ -1029,12 +944,6 @@ repeat_directive:
|
|||||||
continue_repeating:
|
continue_repeating:
|
||||||
mov esi,[ebx+8]
|
mov esi,[ebx+8]
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
negative_repeat:
|
|
||||||
cmp [error_line],0
|
|
||||||
jne zero_repeat
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],invalid_value
|
|
||||||
zero_repeat:
|
zero_repeat:
|
||||||
mov al,[esi]
|
mov al,[esi]
|
||||||
or al,al
|
or al,al
|
||||||
@ -1187,7 +1096,8 @@ if_directive:
|
|||||||
mov eax,[current_line]
|
mov eax,[current_line]
|
||||||
mov [error_line],eax
|
mov [error_line],eax
|
||||||
find_end_directive:
|
find_end_directive:
|
||||||
call skip_line
|
call skip_symbol
|
||||||
|
jnc find_end_directive
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,0Fh
|
cmp al,0Fh
|
||||||
jne no_end_directive
|
jne no_end_directive
|
||||||
@ -1358,23 +1268,10 @@ data_bytes:
|
|||||||
cmp byte [ebx],81h
|
cmp byte [ebx],81h
|
||||||
jne simple_data_value
|
jne simple_data_value
|
||||||
inc esi
|
inc esi
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne dup_value_ok
|
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
dup_value_ok:
|
|
||||||
inc esi
|
inc esi
|
||||||
cmp eax,0
|
or eax,eax
|
||||||
jg dup_positive
|
jz duplicate_zero_times
|
||||||
cmp [error_line],0
|
|
||||||
jne dup_invalid
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],invalid_value
|
|
||||||
dup_invalid:
|
|
||||||
mov eax,1
|
|
||||||
dup_positive:
|
|
||||||
cmp byte [esi],'{'
|
cmp byte [esi],'{'
|
||||||
jne duplicate_single_data_value
|
jne duplicate_single_data_value
|
||||||
inc esi
|
inc esi
|
||||||
@ -1404,6 +1301,20 @@ data_bytes:
|
|||||||
jz data_defined
|
jz data_defined
|
||||||
mov esi,ebx
|
mov esi,ebx
|
||||||
jmp duplicate_single_data_value
|
jmp duplicate_single_data_value
|
||||||
|
duplicate_zero_times:
|
||||||
|
cmp byte [esi],'{'
|
||||||
|
jne skip_single_data_value
|
||||||
|
inc esi
|
||||||
|
skip_data_value:
|
||||||
|
call skip_symbol
|
||||||
|
jc invalid_argument
|
||||||
|
cmp byte [esi],'}'
|
||||||
|
jne skip_data_value
|
||||||
|
inc esi
|
||||||
|
jmp data_defined
|
||||||
|
skip_single_data_value:
|
||||||
|
call skip_symbol
|
||||||
|
jmp data_defined
|
||||||
simple_data_value:
|
simple_data_value:
|
||||||
cmp edi,[display_buffer]
|
cmp edi,[display_buffer]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
@ -1691,7 +1602,7 @@ data_file:
|
|||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
push ebx
|
push ebx
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
pop ebx
|
pop ebx
|
||||||
mov edx,eax
|
mov edx,eax
|
||||||
sub [esp],edx
|
sub [esp],edx
|
||||||
@ -1706,7 +1617,7 @@ data_file:
|
|||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
push ebx edx
|
push ebx edx
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
pop edx ebx
|
pop edx ebx
|
||||||
cmp eax,[esp]
|
cmp eax,[esp]
|
||||||
ja value_out_of_range
|
ja value_out_of_range
|
||||||
@ -1731,8 +1642,13 @@ data_file:
|
|||||||
open_binary_file:
|
open_binary_file:
|
||||||
push esi
|
push esi
|
||||||
push edi
|
push edi
|
||||||
mov esi,[current_line]
|
mov eax,[current_line]
|
||||||
mov esi,[esi]
|
find_current_source_path:
|
||||||
|
mov esi,[eax]
|
||||||
|
test byte [eax+7],80h
|
||||||
|
jz get_current_path
|
||||||
|
mov eax,[eax+12]
|
||||||
|
jmp find_current_source_path
|
||||||
get_current_path:
|
get_current_path:
|
||||||
lodsb
|
lodsb
|
||||||
stosb
|
stosb
|
||||||
@ -1772,14 +1688,7 @@ reserve_bytes:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne rb_value_ok
|
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
rb_value_ok:
|
|
||||||
cmp eax,0
|
|
||||||
jl reserve_negative
|
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
mov edx,ecx
|
mov edx,ecx
|
||||||
add edx,edi
|
add edx,edi
|
||||||
@ -1806,27 +1715,13 @@ reserve_bytes:
|
|||||||
pop eax
|
pop eax
|
||||||
call undefined_data
|
call undefined_data
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
reserve_negative:
|
|
||||||
cmp [error_line],0
|
|
||||||
jne instruction_assembled
|
|
||||||
mov eax,[current_line]
|
|
||||||
mov [error_line],eax
|
|
||||||
mov [error],invalid_value
|
|
||||||
jmp instruction_assembled
|
|
||||||
reserve_words:
|
reserve_words:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,'('
|
cmp al,'('
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne rw_value_ok
|
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
rw_value_ok:
|
|
||||||
cmp eax,0
|
|
||||||
jl reserve_negative
|
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
mov edx,ecx
|
mov edx,ecx
|
||||||
shl edx,1
|
shl edx,1
|
||||||
@ -1854,14 +1749,7 @@ reserve_dwords:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne rd_value_ok
|
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
rd_value_ok:
|
|
||||||
cmp eax,0
|
|
||||||
jl reserve_negative
|
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
mov edx,ecx
|
mov edx,ecx
|
||||||
shl edx,1
|
shl edx,1
|
||||||
@ -1887,14 +1775,7 @@ reserve_pwords:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne rp_value_ok
|
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
rp_value_ok:
|
|
||||||
cmp eax,0
|
|
||||||
jl reserve_negative
|
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
shl ecx,1
|
shl ecx,1
|
||||||
jc out_of_memory
|
jc out_of_memory
|
||||||
@ -1917,14 +1798,7 @@ reserve_qwords:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne rq_value_ok
|
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
rq_value_ok:
|
|
||||||
cmp eax,0
|
|
||||||
jl reserve_negative
|
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
shl ecx,1
|
shl ecx,1
|
||||||
jc out_of_memory
|
jc out_of_memory
|
||||||
@ -1948,14 +1822,7 @@ reserve_twords:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [next_pass_needed],0
|
|
||||||
jne rt_value_ok
|
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
rt_value_ok:
|
|
||||||
cmp eax,0
|
|
||||||
jl reserve_negative
|
|
||||||
mov ecx,eax
|
mov ecx,eax
|
||||||
shl ecx,2
|
shl ecx,2
|
||||||
jc out_of_memory
|
jc out_of_memory
|
||||||
@ -1978,15 +1845,13 @@ align_directive:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
mov edx,eax
|
mov edx,eax
|
||||||
dec edx
|
dec edx
|
||||||
test eax,edx
|
test eax,edx
|
||||||
jnz negative_times
|
jnz invalid_align_value
|
||||||
or eax,eax
|
or eax,eax
|
||||||
jz negative_times
|
jz invalid_align_value
|
||||||
cmp eax,1
|
cmp eax,1
|
||||||
je instruction_assembled
|
je instruction_assembled
|
||||||
mov ecx,edi
|
mov ecx,edi
|
||||||
@ -2023,6 +1888,13 @@ align_directive:
|
|||||||
je nops
|
je nops
|
||||||
add edi,ecx
|
add edi,ecx
|
||||||
jmp reserved_data
|
jmp reserved_data
|
||||||
|
invalid_align_value:
|
||||||
|
cmp [error_line],0
|
||||||
|
jne instruction_assembled
|
||||||
|
mov eax,[current_line]
|
||||||
|
mov [error_line],eax
|
||||||
|
mov [error],invalid_value
|
||||||
|
jmp instruction_assembled
|
||||||
nops:
|
nops:
|
||||||
mov eax,90909090h
|
mov eax,90909090h
|
||||||
shr ecx,1
|
shr ecx,1
|
||||||
|
1353
programs/develop/fasm/trunk/avx.inc
Normal file
1353
programs/develop/fasm/trunk/avx.inc
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
; flat assembler core
|
; flat assembler core
|
||||||
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
; Copyright (c) 1999-2011, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
|
|
||||||
out_of_memory:
|
out_of_memory:
|
||||||
@ -12,95 +12,101 @@ stack_overflow:
|
|||||||
main_file_not_found:
|
main_file_not_found:
|
||||||
push _main_file_not_found
|
push _main_file_not_found
|
||||||
jmp fatal_error
|
jmp fatal_error
|
||||||
unexpected_end_of_file:
|
|
||||||
push _unexpected_end_of_file
|
|
||||||
jmp fatal_error
|
|
||||||
code_cannot_be_generated:
|
|
||||||
push _code_cannot_be_generated
|
|
||||||
jmp fatal_error
|
|
||||||
format_limitations_exceeded:
|
|
||||||
push _format_limitations_exceeded
|
|
||||||
jmp fatal_error
|
|
||||||
invalid_definition:
|
|
||||||
push _invalid_definition
|
|
||||||
jmp fatal_error
|
|
||||||
write_failed:
|
write_failed:
|
||||||
push _write_failed
|
push _write_failed
|
||||||
jmp fatal_error
|
jmp fatal_error
|
||||||
|
|
||||||
|
unexpected_end_of_file:
|
||||||
|
push _unexpected_end_of_file
|
||||||
|
jmp general_error
|
||||||
|
code_cannot_be_generated:
|
||||||
|
push _code_cannot_be_generated
|
||||||
|
jmp general_error
|
||||||
|
format_limitations_exceeded:
|
||||||
|
push _format_limitations_exceeded
|
||||||
|
general_error:
|
||||||
|
cmp [symbols_file],0
|
||||||
|
je fatal_error
|
||||||
|
call dump_preprocessed_source
|
||||||
|
jmp fatal_error
|
||||||
|
|
||||||
file_not_found:
|
file_not_found:
|
||||||
push _file_not_found
|
push _file_not_found
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
error_reading_file:
|
error_reading_file:
|
||||||
push _error_reading_file
|
push _error_reading_file
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_file_format:
|
invalid_file_format:
|
||||||
push _invalid_file_format
|
push _invalid_file_format
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_macro_arguments:
|
invalid_macro_arguments:
|
||||||
push _invalid_macro_arguments
|
push _invalid_macro_arguments
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
incomplete_macro:
|
incomplete_macro:
|
||||||
push _incomplete_macro
|
push _incomplete_macro
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
unexpected_characters:
|
unexpected_characters:
|
||||||
push _unexpected_characters
|
push _unexpected_characters
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_argument:
|
invalid_argument:
|
||||||
push _invalid_argument
|
push _invalid_argument
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
illegal_instruction:
|
illegal_instruction:
|
||||||
push _illegal_instruction
|
push _illegal_instruction
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_operand:
|
invalid_operand:
|
||||||
push _invalid_operand
|
push _invalid_operand
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_operand_size:
|
invalid_operand_size:
|
||||||
push _invalid_operand_size
|
push _invalid_operand_size
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
operand_size_not_specified:
|
operand_size_not_specified:
|
||||||
push _operand_size_not_specified
|
push _operand_size_not_specified
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
operand_sizes_do_not_match:
|
operand_sizes_do_not_match:
|
||||||
push _operand_sizes_do_not_match
|
push _operand_sizes_do_not_match
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_address_size:
|
invalid_address_size:
|
||||||
push _invalid_address_size
|
push _invalid_address_size
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
address_sizes_do_not_agree:
|
address_sizes_do_not_agree:
|
||||||
push _address_sizes_do_not_agree
|
push _address_sizes_do_not_agree
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
prefix_conflict:
|
prefix_conflict:
|
||||||
push _prefix_conflict
|
push _prefix_conflict
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
long_immediate_not_encodable:
|
long_immediate_not_encodable:
|
||||||
push _long_immediate_not_encodable
|
push _long_immediate_not_encodable
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
relative_jump_out_of_range:
|
relative_jump_out_of_range:
|
||||||
push _relative_jump_out_of_range
|
push _relative_jump_out_of_range
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_expression:
|
invalid_expression:
|
||||||
push _invalid_expression
|
push _invalid_expression
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_address:
|
invalid_address:
|
||||||
push _invalid_address
|
push _invalid_address
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_value:
|
invalid_value:
|
||||||
push _invalid_value
|
push _invalid_value
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
value_out_of_range:
|
value_out_of_range:
|
||||||
push _value_out_of_range
|
push _value_out_of_range
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
undefined_symbol:
|
undefined_symbol:
|
||||||
mov edi,message
|
mov edi,message
|
||||||
mov esi,_undefined_symbol
|
mov esi,_undefined_symbol
|
||||||
call copy_asciiz
|
call copy_asciiz
|
||||||
push message
|
push message
|
||||||
cmp [error_info],0
|
cmp [error_info],0
|
||||||
je assembler_error
|
je error_with_source
|
||||||
|
mov esi,[error_info]
|
||||||
|
mov esi,[esi+24]
|
||||||
|
or esi,esi
|
||||||
|
jz error_with_source
|
||||||
mov byte [edi-1],20h
|
mov byte [edi-1],20h
|
||||||
call write_quoted_symbol_name
|
call write_quoted_symbol_name
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
copy_asciiz:
|
copy_asciiz:
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
@ -110,7 +116,6 @@ undefined_symbol:
|
|||||||
write_quoted_symbol_name:
|
write_quoted_symbol_name:
|
||||||
mov al,27h
|
mov al,27h
|
||||||
stosb
|
stosb
|
||||||
mov esi,[error_info]
|
|
||||||
movzx ecx,byte [esi-1]
|
movzx ecx,byte [esi-1]
|
||||||
rep movs byte [edi],[esi]
|
rep movs byte [edi],[esi]
|
||||||
mov ax,27h
|
mov ax,27h
|
||||||
@ -122,6 +127,10 @@ symbol_out_of_scope:
|
|||||||
call copy_asciiz
|
call copy_asciiz
|
||||||
cmp [error_info],0
|
cmp [error_info],0
|
||||||
je finish_symbol_out_of_scope_message
|
je finish_symbol_out_of_scope_message
|
||||||
|
mov esi,[error_info]
|
||||||
|
mov esi,[esi+24]
|
||||||
|
or esi,esi
|
||||||
|
jz finish_symbol_out_of_scope_message
|
||||||
mov byte [edi-1],20h
|
mov byte [edi-1],20h
|
||||||
call write_quoted_symbol_name
|
call write_quoted_symbol_name
|
||||||
finish_symbol_out_of_scope_message:
|
finish_symbol_out_of_scope_message:
|
||||||
@ -129,46 +138,51 @@ symbol_out_of_scope:
|
|||||||
mov esi,_symbol_out_of_scope_2
|
mov esi,_symbol_out_of_scope_2
|
||||||
call copy_asciiz
|
call copy_asciiz
|
||||||
push message
|
push message
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_use_of_symbol:
|
invalid_use_of_symbol:
|
||||||
push _invalid_use_of_symbol
|
push _invalid_use_of_symbol
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
name_too_long:
|
name_too_long:
|
||||||
push _name_too_long
|
push _name_too_long
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invalid_name:
|
invalid_name:
|
||||||
push _invalid_name
|
push _invalid_name
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
reserved_word_used_as_symbol:
|
reserved_word_used_as_symbol:
|
||||||
push _reserved_word_used_as_symbol
|
push _reserved_word_used_as_symbol
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
symbol_already_defined:
|
symbol_already_defined:
|
||||||
push _symbol_already_defined
|
push _symbol_already_defined
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
missing_end_quote:
|
missing_end_quote:
|
||||||
push _missing_end_quote
|
push _missing_end_quote
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
missing_end_directive:
|
missing_end_directive:
|
||||||
push _missing_end_directive
|
push _missing_end_directive
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
unexpected_instruction:
|
unexpected_instruction:
|
||||||
push _unexpected_instruction
|
push _unexpected_instruction
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
extra_characters_on_line:
|
extra_characters_on_line:
|
||||||
push _extra_characters_on_line
|
push _extra_characters_on_line
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
section_not_aligned_enough:
|
section_not_aligned_enough:
|
||||||
push _section_not_aligned_enough
|
push _section_not_aligned_enough
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
setting_already_specified:
|
setting_already_specified:
|
||||||
push _setting_already_specified
|
push _setting_already_specified
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
data_already_defined:
|
data_already_defined:
|
||||||
push _data_already_defined
|
push _data_already_defined
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
too_many_repeats:
|
too_many_repeats:
|
||||||
push _too_many_repeats
|
push _too_many_repeats
|
||||||
jmp assembler_error
|
jmp error_with_source
|
||||||
invoked_error:
|
invoked_error:
|
||||||
push _invoked_error
|
push _invoked_error
|
||||||
jmp assembler_error
|
error_with_source:
|
||||||
|
cmp [symbols_file],0
|
||||||
|
je assembler_error
|
||||||
|
call dump_preprocessed_source
|
||||||
|
call restore_preprocessed_source
|
||||||
|
jmp assembler_error
|
||||||
|
File diff suppressed because it is too large
Load Diff
1232
programs/develop/fasm/trunk/exprpars.inc
Normal file
1232
programs/develop/fasm/trunk/exprpars.inc
Normal file
File diff suppressed because it is too large
Load Diff
@ -622,14 +622,16 @@ display_bytes_count:
|
|||||||
include 'system.inc'
|
include 'system.inc'
|
||||||
include 'version.inc'
|
include 'version.inc'
|
||||||
include 'errors.inc'
|
include 'errors.inc'
|
||||||
include 'expressi.inc'
|
include 'symbdump.inc'
|
||||||
include 'preproce.inc'
|
include 'preproce.inc'
|
||||||
include 'parser.inc'
|
include 'parser.inc'
|
||||||
|
include 'exprpars.inc'
|
||||||
include 'assemble.inc'
|
include 'assemble.inc'
|
||||||
|
include 'exprcalc.inc'
|
||||||
include 'formats.inc'
|
include 'formats.inc'
|
||||||
include 'x86_64.inc'
|
include 'x86_64.inc'
|
||||||
|
include 'avx.inc'
|
||||||
include 'tables.inc'
|
include 'tables.inc'
|
||||||
include 'symbdump.inc'
|
|
||||||
include 'messages.inc'
|
include 'messages.inc'
|
||||||
;---------------------------------------------------------------------
|
;---------------------------------------------------------------------
|
||||||
title db appname,VERSION_STRING,0
|
title db appname,VERSION_STRING,0
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
; flat assembler core
|
; flat assembler core
|
||||||
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
; Copyright (c) 1999-2011, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
|
|
||||||
formatter:
|
formatter:
|
||||||
@ -204,7 +204,7 @@ format_directive:
|
|||||||
cmp [output_format],0
|
cmp [output_format],0
|
||||||
jne unexpected_instruction
|
jne unexpected_instruction
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
cmp al,17h
|
cmp al,1Ch
|
||||||
je format_prefix
|
je format_prefix
|
||||||
cmp al,18h
|
cmp al,18h
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
@ -834,11 +834,11 @@ format_pe:
|
|||||||
mov [subsystem],3
|
mov [subsystem],3
|
||||||
mov [subsystem_version],3 + 10 shl 16
|
mov [subsystem_version],3 + 10 shl 16
|
||||||
mov [image_base],400000h
|
mov [image_base],400000h
|
||||||
|
mov [image_base_high],0
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jz pe_settings
|
jz pe_settings
|
||||||
mov [machine],8664h
|
mov [machine],8664h
|
||||||
mov [subsystem_version],5 + 0 shl 16
|
mov [subsystem_version],5 + 0 shl 16
|
||||||
mov [image_base_high],0
|
|
||||||
pe_settings:
|
pe_settings:
|
||||||
cmp byte [esi],84h
|
cmp byte [esi],84h
|
||||||
je get_stub_name
|
je get_stub_name
|
||||||
@ -854,6 +854,10 @@ format_pe:
|
|||||||
je dll_flag
|
je dll_flag
|
||||||
cmp al,81h
|
cmp al,81h
|
||||||
je wdm_flag
|
je wdm_flag
|
||||||
|
cmp al,82h
|
||||||
|
je large_flag
|
||||||
|
cmp al,83h
|
||||||
|
je nx_flag
|
||||||
jmp pe_settings
|
jmp pe_settings
|
||||||
dll_flag:
|
dll_flag:
|
||||||
bts [format_flags],8
|
bts [format_flags],8
|
||||||
@ -863,6 +867,16 @@ format_pe:
|
|||||||
bts [format_flags],9
|
bts [format_flags],9
|
||||||
jc setting_already_specified
|
jc setting_already_specified
|
||||||
jmp pe_settings
|
jmp pe_settings
|
||||||
|
large_flag:
|
||||||
|
bts [format_flags],11
|
||||||
|
jc setting_already_specified
|
||||||
|
test [format_flags],8
|
||||||
|
jnz invalid_argument
|
||||||
|
jmp pe_settings
|
||||||
|
nx_flag:
|
||||||
|
bts [format_flags],12
|
||||||
|
jc setting_already_specified
|
||||||
|
jmp pe_settings
|
||||||
subsystem_setting:
|
subsystem_setting:
|
||||||
bts [format_flags],7
|
bts [format_flags],7
|
||||||
jc setting_already_specified
|
jc setting_already_specified
|
||||||
@ -870,7 +884,7 @@ format_pe:
|
|||||||
mov [subsystem],ax
|
mov [subsystem],ax
|
||||||
cmp ax,10
|
cmp ax,10
|
||||||
jb subsystem_type_ok
|
jb subsystem_type_ok
|
||||||
or [format_flags],8
|
or [format_flags],4
|
||||||
subsystem_type_ok:
|
subsystem_type_ok:
|
||||||
cmp byte [esi],'('
|
cmp byte [esi],'('
|
||||||
jne pe_settings
|
jne pe_settings
|
||||||
@ -924,7 +938,7 @@ format_pe:
|
|||||||
je invalid_value
|
je invalid_value
|
||||||
push edx edi
|
push edx edi
|
||||||
add edi,[stub_size]
|
add edi,[stub_size]
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jnz get_peplus_base
|
jnz get_peplus_base
|
||||||
call get_dword_value
|
call get_dword_value
|
||||||
mov [image_base],eax
|
mov [image_base],eax
|
||||||
@ -966,7 +980,7 @@ format_pe:
|
|||||||
pe_stub_ok:
|
pe_stub_ok:
|
||||||
mov edx,edi
|
mov edx,edi
|
||||||
mov ecx,18h+0E0h
|
mov ecx,18h+0E0h
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jz zero_pe_header
|
jz zero_pe_header
|
||||||
add ecx,10h
|
add ecx,10h
|
||||||
zero_pe_header:
|
zero_pe_header:
|
||||||
@ -991,10 +1005,10 @@ format_pe:
|
|||||||
mov dword [edx+3Ch],eax
|
mov dword [edx+3Ch],eax
|
||||||
pe_alignment_ok:
|
pe_alignment_ok:
|
||||||
mov word [edx+1Ah],VERSION_MAJOR + VERSION_MINOR shl 8
|
mov word [edx+1Ah],VERSION_MAJOR + VERSION_MINOR shl 8
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jnz init_peplus_specific
|
jnz init_peplus_specific
|
||||||
mov byte [edx+14h],0E0h ; size of optional header
|
mov byte [edx+14h],0E0h ; size of optional header
|
||||||
mov dword [edx+16h],10B010Eh; flags and magic value
|
mov dword [edx+16h],10B010Fh; flags and magic value
|
||||||
mov eax,[image_base]
|
mov eax,[image_base]
|
||||||
mov [edx+34h],eax
|
mov [edx+34h],eax
|
||||||
mov byte [edx+60h+1],10h ; stack reserve
|
mov byte [edx+60h+1],10h ; stack reserve
|
||||||
@ -1004,7 +1018,7 @@ format_pe:
|
|||||||
jmp pe_header_ok
|
jmp pe_header_ok
|
||||||
init_peplus_specific:
|
init_peplus_specific:
|
||||||
mov byte [edx+14h],0F0h ; size of optional header
|
mov byte [edx+14h],0F0h ; size of optional header
|
||||||
mov dword [edx+16h],20B002Eh; flags and magic value
|
mov dword [edx+16h],20B002Fh; flags and magic value
|
||||||
mov eax,[image_base]
|
mov eax,[image_base]
|
||||||
mov [edx+30h],eax
|
mov [edx+30h],eax
|
||||||
mov eax,[image_base_high]
|
mov eax,[image_base_high]
|
||||||
@ -1063,19 +1077,24 @@ format_pe:
|
|||||||
adc ecx,0
|
adc ecx,0
|
||||||
add eax,edi
|
add eax,edi
|
||||||
adc ecx,0
|
adc ecx,0
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jnz peplus_org
|
jnz peplus_org
|
||||||
sub eax,[edx+34h]
|
sub eax,[edx+34h]
|
||||||
sbb ecx,0
|
sbb ecx,0
|
||||||
mov bl,2
|
|
||||||
mov [code_type],32
|
|
||||||
jmp pe_org_ok
|
jmp pe_org_ok
|
||||||
peplus_org:
|
peplus_org:
|
||||||
sub eax,[edx+30h]
|
sub eax,[edx+30h]
|
||||||
sbb ecx,[edx+34h]
|
sbb ecx,[edx+34h]
|
||||||
|
pe_org_ok:
|
||||||
|
test [format_flags],8
|
||||||
|
jnz pe64_code
|
||||||
|
mov bl,2
|
||||||
|
mov [code_type],32
|
||||||
|
jmp pe_code_type_ok
|
||||||
|
pe64_code:
|
||||||
mov bl,4
|
mov bl,4
|
||||||
mov [code_type],64
|
mov [code_type],64
|
||||||
pe_org_ok:
|
pe_code_type_ok:
|
||||||
bt [resolver_flags],0
|
bt [resolver_flags],0
|
||||||
jc pe_labels_type_ok
|
jc pe_labels_type_ok
|
||||||
xor bl,bl
|
xor bl,bl
|
||||||
@ -1093,6 +1112,14 @@ format_pe:
|
|||||||
jnc wdm_flag_ok
|
jnc wdm_flag_ok
|
||||||
or byte [edx+5Eh+1],20h
|
or byte [edx+5Eh+1],20h
|
||||||
wdm_flag_ok:
|
wdm_flag_ok:
|
||||||
|
bt [format_flags],11
|
||||||
|
jnc large_flag_ok
|
||||||
|
or byte [edx+16h],20h
|
||||||
|
large_flag_ok:
|
||||||
|
bt [format_flags],12
|
||||||
|
jnc nx_ok
|
||||||
|
or byte [edx+5Eh+1],1
|
||||||
|
nx_ok:
|
||||||
jmp format_defined
|
jmp format_defined
|
||||||
pe_section:
|
pe_section:
|
||||||
call close_pe_section
|
call close_pe_section
|
||||||
@ -1135,12 +1162,17 @@ pe_section:
|
|||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
sub eax,[ebx+0Ch]
|
sub eax,[ebx+0Ch]
|
||||||
sbb ecx,0
|
sbb ecx,0
|
||||||
|
mov [labels_type],2
|
||||||
|
mov [code_type],32
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
|
jz pe_section_code_type_ok
|
||||||
|
mov [labels_type],4
|
||||||
|
mov [code_type],64
|
||||||
|
pe_section_code_type_ok:
|
||||||
|
test [format_flags],4
|
||||||
jnz peplus_section_org
|
jnz peplus_section_org
|
||||||
sub eax,[edx+34h]
|
sub eax,[edx+34h]
|
||||||
sbb ecx,0
|
sbb ecx,0
|
||||||
mov [labels_type],2
|
|
||||||
mov [code_type],32
|
|
||||||
bt [resolver_flags],0
|
bt [resolver_flags],0
|
||||||
jc pe_section_org_ok
|
jc pe_section_org_ok
|
||||||
mov [labels_type],0
|
mov [labels_type],0
|
||||||
@ -1148,8 +1180,6 @@ pe_section:
|
|||||||
peplus_section_org:
|
peplus_section_org:
|
||||||
sub eax,[edx+30h]
|
sub eax,[edx+30h]
|
||||||
sbb ecx,[edx+34h]
|
sbb ecx,[edx+34h]
|
||||||
mov [labels_type],4
|
|
||||||
mov [code_type],64
|
|
||||||
bt [resolver_flags],0
|
bt [resolver_flags],0
|
||||||
jc pe_section_org_ok
|
jc pe_section_org_ok
|
||||||
mov [labels_type],0
|
mov [labels_type],0
|
||||||
@ -1170,7 +1200,7 @@ pe_section:
|
|||||||
movzx eax,byte [esi]
|
movzx eax,byte [esi]
|
||||||
inc esi
|
inc esi
|
||||||
mov ecx,ebx
|
mov ecx,ebx
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jnz peplus_directory
|
jnz peplus_directory
|
||||||
xchg ecx,[edx+78h+eax*8]
|
xchg ecx,[edx+78h+eax*8]
|
||||||
mov dword [edx+78h+eax*8+4],-1
|
mov dword [edx+78h+eax*8+4],-1
|
||||||
@ -1244,7 +1274,7 @@ pe_section:
|
|||||||
test byte [ebx+24h],40h
|
test byte [ebx+24h],40h
|
||||||
jz pe_data_sum_ok
|
jz pe_data_sum_ok
|
||||||
add [edx+20h],ecx
|
add [edx+20h],ecx
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jnz pe_data_sum_ok
|
jnz pe_data_sum_ok
|
||||||
cmp dword [edx+30h],0
|
cmp dword [edx+30h],0
|
||||||
jne pe_data_sum_ok
|
jne pe_data_sum_ok
|
||||||
@ -1291,7 +1321,7 @@ data_directive:
|
|||||||
sub ecx,[ebx+14h]
|
sub ecx,[ebx+14h]
|
||||||
add ecx,[ebx+0Ch]
|
add ecx,[ebx+0Ch]
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jnz peplus_data
|
jnz peplus_data
|
||||||
xchg ecx,[edx+78h+eax*8]
|
xchg ecx,[edx+78h+eax*8]
|
||||||
jmp init_pe_data
|
jmp init_pe_data
|
||||||
@ -1318,7 +1348,7 @@ data_directive:
|
|||||||
sub ecx,[edx+14h]
|
sub ecx,[edx+14h]
|
||||||
add ecx,[edx+0Ch]
|
add ecx,[edx+0Ch]
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jnz end_peplus_data
|
jnz end_peplus_data
|
||||||
sub ecx,[edx+78h+eax*8]
|
sub ecx,[edx+78h+eax*8]
|
||||||
mov [edx+78h+eax*8+4],ecx
|
mov [edx+78h+eax*8+4],ecx
|
||||||
@ -1334,7 +1364,7 @@ pe_entry:
|
|||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jnz peplus_entry
|
jnz pe64_entry
|
||||||
call get_dword_value
|
call get_dword_value
|
||||||
mov bl,2
|
mov bl,2
|
||||||
bt [resolver_flags],0
|
bt [resolver_flags],0
|
||||||
@ -1349,33 +1379,36 @@ pe_entry:
|
|||||||
mov [error_line],edx
|
mov [error_line],edx
|
||||||
mov [error],invalid_address
|
mov [error],invalid_address
|
||||||
pe_entry_ok:
|
pe_entry_ok:
|
||||||
|
cdq
|
||||||
|
test [format_flags],4
|
||||||
|
jnz pe64_entry_type_ok
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
sub eax,[edx+34h]
|
sub eax,[edx+34h]
|
||||||
mov [edx+28h],eax
|
mov [edx+28h],eax
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
peplus_entry:
|
pe64_entry:
|
||||||
call get_qword_value
|
call get_qword_value
|
||||||
mov bl,4
|
mov bl,4
|
||||||
bt [resolver_flags],0
|
bt [resolver_flags],0
|
||||||
jc check_peplus_entry_label_type
|
jc check_pe64_entry_label_type
|
||||||
xor bl,bl
|
xor bl,bl
|
||||||
check_peplus_entry_label_type:
|
check_pe64_entry_label_type:
|
||||||
cmp [value_type],bl
|
cmp [value_type],bl
|
||||||
je peplus_entry_type_ok
|
je pe64_entry_type_ok
|
||||||
cmp [error_line],0
|
cmp [error_line],0
|
||||||
jne peplus_entry_type_ok
|
jne pe64_entry_type_ok
|
||||||
mov edx,[current_line]
|
mov edx,[current_line]
|
||||||
mov [error_line],edx
|
mov [error_line],edx
|
||||||
mov [error],invalid_address
|
mov [error],invalid_address
|
||||||
peplus_entry_type_ok:
|
pe64_entry_type_ok:
|
||||||
mov ecx,[code_start]
|
mov ecx,[code_start]
|
||||||
sub eax,[ecx+30h]
|
sub eax,[ecx+30h]
|
||||||
sbb edx,[ecx+34h]
|
sbb edx,[ecx+34h]
|
||||||
jz peplus_entry_range_ok
|
jz pe64_entry_range_ok
|
||||||
mov edx,[current_line]
|
mov edx,[current_line]
|
||||||
mov [error_line],edx
|
mov [error_line],edx
|
||||||
mov [error],value_out_of_range
|
mov [error],value_out_of_range
|
||||||
peplus_entry_range_ok:
|
pe64_entry_range_ok:
|
||||||
mov [ecx+28h],eax
|
mov [ecx+28h],eax
|
||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
pe_stack:
|
pe_stack:
|
||||||
@ -1384,11 +1417,9 @@ pe_stack:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jnz peplus_stack
|
jnz peplus_stack
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
mov [edx+60h],eax
|
mov [edx+60h],eax
|
||||||
cmp byte [esi],','
|
cmp byte [esi],','
|
||||||
@ -1399,9 +1430,7 @@ pe_stack:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
mov [edx+64h],eax
|
mov [edx+64h],eax
|
||||||
cmp eax,[edx+60h]
|
cmp eax,[edx+60h]
|
||||||
@ -1456,11 +1485,9 @@ pe_heap:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jnz peplus_heap
|
jnz peplus_heap
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
mov [edx+68h],eax
|
mov [edx+68h],eax
|
||||||
cmp byte [esi],','
|
cmp byte [esi],','
|
||||||
@ -1471,9 +1498,7 @@ pe_heap:
|
|||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
mov [edx+6Ch],eax
|
mov [edx+6Ch],eax
|
||||||
cmp eax,[edx+68h]
|
cmp eax,[edx+68h]
|
||||||
@ -1508,11 +1533,11 @@ pe_heap:
|
|||||||
jmp instruction_assembled
|
jmp instruction_assembled
|
||||||
mark_pe_relocation:
|
mark_pe_relocation:
|
||||||
push eax ebx
|
push eax ebx
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jz check_pe32_relocation_type
|
jz check_standard_pe_relocation_type
|
||||||
cmp [value_type],4
|
cmp [value_type],4
|
||||||
je pe_relocation_type_ok
|
je pe_relocation_type_ok
|
||||||
check_pe32_relocation_type:
|
check_standard_pe_relocation_type:
|
||||||
cmp [value_type],2
|
cmp [value_type],2
|
||||||
je pe_relocation_type_ok
|
je pe_relocation_type_ok
|
||||||
cmp [error_line],0
|
cmp [error_line],0
|
||||||
@ -1527,7 +1552,6 @@ mark_pe_relocation:
|
|||||||
add eax,[ebx+0Ch]
|
add eax,[ebx+0Ch]
|
||||||
mov ebx,[free_additional_memory]
|
mov ebx,[free_additional_memory]
|
||||||
inc [number_of_relocations]
|
inc [number_of_relocations]
|
||||||
jz invalid_use_of_symbol
|
|
||||||
add ebx,5
|
add ebx,5
|
||||||
cmp ebx,[structures_buffer]
|
cmp ebx,[structures_buffer]
|
||||||
jae out_of_memory
|
jae out_of_memory
|
||||||
@ -1549,20 +1573,36 @@ generate_pe_data:
|
|||||||
je make_pe_fixups
|
je make_pe_fixups
|
||||||
ret
|
ret
|
||||||
make_pe_fixups:
|
make_pe_fixups:
|
||||||
|
mov edx,[code_start]
|
||||||
|
and byte [edx+16h],not 1
|
||||||
|
or byte [edx+5Eh],40h
|
||||||
bts [resolver_flags],0
|
bts [resolver_flags],0
|
||||||
jc pe_relocatable_ok
|
jc fixups_ready
|
||||||
or [next_pass_needed],-1
|
or [next_pass_needed],-1
|
||||||
pe_relocatable_ok:
|
fixups_ready:
|
||||||
|
mov [last_fixup_base],0
|
||||||
|
call make_fixups
|
||||||
|
xchg eax,[actual_fixups_size]
|
||||||
|
sub eax,[actual_fixups_size]
|
||||||
|
ja reserve_forward_fixups
|
||||||
|
xor eax,eax
|
||||||
|
reserve_forward_fixups:
|
||||||
|
mov [reserved_fixups],edi
|
||||||
|
add edi,eax
|
||||||
|
mov [reserved_fixups_size],eax
|
||||||
|
ret
|
||||||
|
make_fixups:
|
||||||
push esi
|
push esi
|
||||||
mov ecx,[number_of_relocations]
|
xor ecx,ecx
|
||||||
|
xchg ecx,[number_of_relocations]
|
||||||
mov esi,[free_additional_memory]
|
mov esi,[free_additional_memory]
|
||||||
lea eax,[ecx*5]
|
lea eax,[ecx*5]
|
||||||
sub esi,eax
|
sub esi,eax
|
||||||
mov [free_additional_memory],esi
|
mov [free_additional_memory],esi
|
||||||
or [number_of_relocations],-1
|
mov edx,[last_fixup_base]
|
||||||
xor edx,edx
|
|
||||||
mov ebp,edi
|
mov ebp,edi
|
||||||
make_fixups:
|
jecxz fixups_done
|
||||||
|
make_fixup:
|
||||||
cmp [esi],edx
|
cmp [esi],edx
|
||||||
jb store_fixup
|
jb store_fixup
|
||||||
mov eax,edi
|
mov eax,edi
|
||||||
@ -1582,7 +1622,6 @@ make_pe_fixups:
|
|||||||
mov eax,8
|
mov eax,8
|
||||||
stos dword [edi]
|
stos dword [edi]
|
||||||
store_fixup:
|
store_fixup:
|
||||||
jecxz fixups_done
|
|
||||||
add dword [ebx],2
|
add dword [ebx],2
|
||||||
mov ah,[esi+1]
|
mov ah,[esi+1]
|
||||||
and ah,0Fh
|
and ah,0Fh
|
||||||
@ -1592,9 +1631,12 @@ make_pe_fixups:
|
|||||||
mov al,[esi]
|
mov al,[esi]
|
||||||
stos word [edi]
|
stos word [edi]
|
||||||
add esi,5
|
add esi,5
|
||||||
loop make_fixups
|
loop make_fixup
|
||||||
fixups_done:
|
fixups_done:
|
||||||
|
mov [last_fixup_base],edx
|
||||||
pop esi
|
pop esi
|
||||||
|
mov eax,edi
|
||||||
|
sub eax,ebp
|
||||||
ret
|
ret
|
||||||
make_pe_resource:
|
make_pe_resource:
|
||||||
cmp byte [esi],82h
|
cmp byte [esi],82h
|
||||||
@ -2169,15 +2211,6 @@ close_pe:
|
|||||||
call make_timestamp
|
call make_timestamp
|
||||||
mov edx,[code_start]
|
mov edx,[code_start]
|
||||||
mov [edx+8],eax
|
mov [edx+8],eax
|
||||||
mov eax,[number_of_relocations]
|
|
||||||
cmp eax,-1
|
|
||||||
je pe_relocations_ok
|
|
||||||
shl eax,2
|
|
||||||
sub [free_additional_memory],eax
|
|
||||||
btr [resolver_flags],0
|
|
||||||
jnc pe_relocations_ok
|
|
||||||
or [next_pass_needed],-1
|
|
||||||
pe_relocations_ok:
|
|
||||||
mov eax,[number_of_sections]
|
mov eax,[number_of_sections]
|
||||||
mov [edx+6],ax
|
mov [edx+6],ax
|
||||||
imul eax,28h
|
imul eax,28h
|
||||||
@ -2195,7 +2228,7 @@ close_pe:
|
|||||||
pe_sections_ok:
|
pe_sections_ok:
|
||||||
xor ecx,ecx
|
xor ecx,ecx
|
||||||
add edx,78h
|
add edx,78h
|
||||||
test [format_flags],8
|
test [format_flags],4
|
||||||
jz process_directories
|
jz process_directories
|
||||||
add edx,10h
|
add edx,10h
|
||||||
process_directories:
|
process_directories:
|
||||||
@ -2214,6 +2247,25 @@ close_pe:
|
|||||||
inc cl
|
inc cl
|
||||||
cmp cl,10h
|
cmp cl,10h
|
||||||
jb process_directories
|
jb process_directories
|
||||||
|
cmp dword [edx+5*8],0
|
||||||
|
jne finish_pe_relocations
|
||||||
|
mov eax,[number_of_relocations]
|
||||||
|
shl eax,2
|
||||||
|
sub [free_additional_memory],eax
|
||||||
|
btr [resolver_flags],0
|
||||||
|
jnc pe_relocations_ok
|
||||||
|
or [next_pass_needed],-1
|
||||||
|
jmp pe_relocations_ok
|
||||||
|
finish_pe_relocations:
|
||||||
|
push edi
|
||||||
|
mov edi,[reserved_fixups]
|
||||||
|
call make_fixups
|
||||||
|
pop edi
|
||||||
|
add [actual_fixups_size],eax
|
||||||
|
cmp eax,[reserved_fixups_size]
|
||||||
|
je pe_relocations_ok
|
||||||
|
or [next_pass_needed],-1
|
||||||
|
pe_relocations_ok:
|
||||||
mov ebx,[code_start]
|
mov ebx,[code_start]
|
||||||
sub ebx,[stub_size]
|
sub ebx,[stub_size]
|
||||||
mov ecx,edi
|
mov ecx,edi
|
||||||
@ -2303,7 +2355,7 @@ coff_section:
|
|||||||
cmp ecx,8
|
cmp ecx,8
|
||||||
ja name_too_long
|
ja name_too_long
|
||||||
coff_section_flags:
|
coff_section_flags:
|
||||||
cmp byte [esi],1Ch
|
cmp byte [esi],8Ch
|
||||||
je coff_section_alignment
|
je coff_section_alignment
|
||||||
cmp byte [esi],19h
|
cmp byte [esi],19h
|
||||||
jne coff_section_settings_ok
|
jne coff_section_settings_ok
|
||||||
@ -2326,18 +2378,13 @@ coff_section:
|
|||||||
jnc invalid_argument
|
jnc invalid_argument
|
||||||
inc esi
|
inc esi
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
or al,al
|
|
||||||
jnz invalid_argument
|
|
||||||
lods byte [esi]
|
|
||||||
cmp al,'('
|
cmp al,'('
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
push ebx
|
push ebx
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
pop ebx
|
pop ebx
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
mov edx,eax
|
mov edx,eax
|
||||||
dec edx
|
dec edx
|
||||||
test eax,edx
|
test eax,edx
|
||||||
@ -2742,7 +2789,6 @@ coff_formatter:
|
|||||||
je public_symbol_type_ok
|
je public_symbol_type_ok
|
||||||
jmp invalid_use_of_symbol
|
jmp invalid_use_of_symbol
|
||||||
undefined_coff_public:
|
undefined_coff_public:
|
||||||
mov eax,[eax+24]
|
|
||||||
mov [error_info],eax
|
mov [error_info],eax
|
||||||
jmp undefined_symbol
|
jmp undefined_symbol
|
||||||
check_64bit_public_symbol:
|
check_64bit_public_symbol:
|
||||||
@ -2952,7 +2998,7 @@ elf_section:
|
|||||||
mov ecx,[esi]
|
mov ecx,[esi]
|
||||||
lea esi,[esi+4+ecx+1]
|
lea esi,[esi+4+ecx+1]
|
||||||
elf_section_flags:
|
elf_section_flags:
|
||||||
cmp byte [esi],1Ch
|
cmp byte [esi],8Ch
|
||||||
je elf_section_alignment
|
je elf_section_alignment
|
||||||
cmp byte [esi],19h
|
cmp byte [esi],19h
|
||||||
jne elf_section_settings_ok
|
jne elf_section_settings_ok
|
||||||
@ -2972,18 +3018,13 @@ elf_section:
|
|||||||
elf_section_alignment:
|
elf_section_alignment:
|
||||||
inc esi
|
inc esi
|
||||||
lods byte [esi]
|
lods byte [esi]
|
||||||
or al,al
|
|
||||||
jnz invalid_argument
|
|
||||||
lods byte [esi]
|
|
||||||
cmp al,'('
|
cmp al,'('
|
||||||
jne invalid_argument
|
jne invalid_argument
|
||||||
cmp byte [esi],'.'
|
cmp byte [esi],'.'
|
||||||
je invalid_value
|
je invalid_value
|
||||||
push ebx
|
push ebx
|
||||||
call get_dword_value
|
call get_count_value
|
||||||
pop ebx
|
pop ebx
|
||||||
cmp [value_type],0
|
|
||||||
jne invalid_use_of_symbol
|
|
||||||
mov edx,eax
|
mov edx,eax
|
||||||
dec edx
|
dec edx
|
||||||
test eax,edx
|
test eax,edx
|
||||||
@ -4007,7 +4048,6 @@ elf_segment:
|
|||||||
elf64_segment_position_ok:
|
elf64_segment_position_ok:
|
||||||
and eax,not 0FFFh
|
and eax,not 0FFFh
|
||||||
ret
|
ret
|
||||||
|
|
||||||
close_elf_exe:
|
close_elf_exe:
|
||||||
test [format_flags],8
|
test [format_flags],8
|
||||||
jnz close_elf64_exe
|
jnz close_elf64_exe
|
||||||
@ -4038,299 +4078,3 @@ close_elf_exe:
|
|||||||
or [next_pass_needed],-1
|
or [next_pass_needed],-1
|
||||||
elf64_exe_ok:
|
elf64_exe_ok:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
dump_symbols:
|
|
||||||
mov ebx,[code_start]
|
|
||||||
mov dword [ebx],'fas'+1Ah shl 24
|
|
||||||
mov dword [ebx+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 38h shl 16
|
|
||||||
add ebx,38h
|
|
||||||
mov edi,ebx
|
|
||||||
mov dword [ebx-38h+10h],38h
|
|
||||||
mov dword [ebx-38h+8],0
|
|
||||||
mov esi,[input_file]
|
|
||||||
call copy_asciiz
|
|
||||||
cmp edi,[display_buffer]
|
|
||||||
jae out_of_memory
|
|
||||||
mov eax,edi
|
|
||||||
sub eax,ebx
|
|
||||||
mov [ebx-38h+0Ch],eax
|
|
||||||
mov esi,[output_file]
|
|
||||||
call copy_asciiz
|
|
||||||
cmp edi,[display_buffer]
|
|
||||||
jae out_of_memory
|
|
||||||
mov edx,[symbols_stream]
|
|
||||||
mov ebp,[free_additional_memory]
|
|
||||||
mov [number_of_sections],0
|
|
||||||
cmp [output_format],4
|
|
||||||
je prepare_strings_table
|
|
||||||
cmp [output_format],5
|
|
||||||
jne strings_table_ready
|
|
||||||
bt [format_flags],0
|
|
||||||
jc strings_table_ready
|
|
||||||
prepare_strings_table:
|
|
||||||
cmp edx,ebp
|
|
||||||
je strings_table_ready
|
|
||||||
mov al,[edx]
|
|
||||||
test al,al
|
|
||||||
jz prepare_string
|
|
||||||
cmp al,80h
|
|
||||||
je prepare_string
|
|
||||||
add edx,0Ch
|
|
||||||
cmp al,0C0h
|
|
||||||
jb prepare_strings_table
|
|
||||||
add edx,4
|
|
||||||
jmp prepare_strings_table
|
|
||||||
prepare_string:
|
|
||||||
mov esi,edi
|
|
||||||
sub esi,ebx
|
|
||||||
xchg esi,[edx+4]
|
|
||||||
test al,al
|
|
||||||
jz prepare_section_string
|
|
||||||
or dword [edx+4],1 shl 31
|
|
||||||
add edx,0Ch
|
|
||||||
prepare_external_string:
|
|
||||||
mov ecx,[esi]
|
|
||||||
add esi,4
|
|
||||||
rep movs byte [edi],[esi]
|
|
||||||
mov byte [edi],0
|
|
||||||
inc edi
|
|
||||||
cmp edi,[display_buffer]
|
|
||||||
jae out_of_memory
|
|
||||||
jmp prepare_strings_table
|
|
||||||
prepare_section_string:
|
|
||||||
mov ecx,[number_of_sections]
|
|
||||||
mov eax,ecx
|
|
||||||
inc eax
|
|
||||||
mov [number_of_sections],eax
|
|
||||||
xchg eax,[edx+4]
|
|
||||||
shl ecx,2
|
|
||||||
add ecx,[free_additional_memory]
|
|
||||||
mov [ecx],eax
|
|
||||||
add edx,20h
|
|
||||||
test esi,esi
|
|
||||||
jz prepare_default_section_string
|
|
||||||
cmp [output_format],5
|
|
||||||
jne prepare_external_string
|
|
||||||
bt [format_flags],0
|
|
||||||
jc prepare_external_string
|
|
||||||
mov esi,[esi]
|
|
||||||
add esi,[resource_data]
|
|
||||||
copy_elf_section_name:
|
|
||||||
lods byte [esi]
|
|
||||||
cmp edi,[display_buffer]
|
|
||||||
jae out_of_memory
|
|
||||||
stos byte [edi]
|
|
||||||
test al,al
|
|
||||||
jnz copy_elf_section_name
|
|
||||||
jmp prepare_strings_table
|
|
||||||
prepare_default_section_string:
|
|
||||||
mov eax,'.fla'
|
|
||||||
stos dword [edi]
|
|
||||||
mov ax,'t'
|
|
||||||
stos word [edi]
|
|
||||||
cmp edi,[display_buffer]
|
|
||||||
jae out_of_memory
|
|
||||||
jmp prepare_strings_table
|
|
||||||
strings_table_ready:
|
|
||||||
mov edx,[display_buffer]
|
|
||||||
mov ebp,[memory_end]
|
|
||||||
sub ebp,[labels_list]
|
|
||||||
add ebp,edx
|
|
||||||
prepare_labels_dump:
|
|
||||||
cmp edx,ebp
|
|
||||||
je labels_dump_ok
|
|
||||||
mov eax,[edx+24]
|
|
||||||
test eax,eax
|
|
||||||
jz label_dump_name_ok
|
|
||||||
cmp eax,[memory_start]
|
|
||||||
jb label_name_outside_source
|
|
||||||
cmp eax,[source_start]
|
|
||||||
ja label_name_outside_source
|
|
||||||
sub eax,[memory_start]
|
|
||||||
dec eax
|
|
||||||
mov [edx+24],eax
|
|
||||||
jmp label_dump_name_ok
|
|
||||||
label_name_outside_source:
|
|
||||||
mov esi,eax
|
|
||||||
mov eax,edi
|
|
||||||
sub eax,ebx
|
|
||||||
or eax,1 shl 31
|
|
||||||
mov [edx+24],eax
|
|
||||||
movzx ecx,byte [esi-1]
|
|
||||||
lea eax,[edi+ecx+1]
|
|
||||||
cmp edi,[display_buffer]
|
|
||||||
jae out_of_memory
|
|
||||||
rep movsb
|
|
||||||
xor al,al
|
|
||||||
stosb
|
|
||||||
label_dump_name_ok:
|
|
||||||
mov eax,[edx+28]
|
|
||||||
test eax,eax
|
|
||||||
jz label_dump_line_ok
|
|
||||||
sub eax,[memory_start]
|
|
||||||
mov [edx+28],eax
|
|
||||||
label_dump_line_ok:
|
|
||||||
mov eax,[edx+20]
|
|
||||||
test eax,eax
|
|
||||||
jz base_symbol_for_label_ok
|
|
||||||
cmp eax,[symbols_stream]
|
|
||||||
mov eax,[eax+4]
|
|
||||||
jae base_symbol_for_label_ok
|
|
||||||
xor eax,eax
|
|
||||||
base_symbol_for_label_ok:
|
|
||||||
mov [edx+20],eax
|
|
||||||
add edx,LABEL_STRUCTURE_SIZE
|
|
||||||
jmp prepare_labels_dump
|
|
||||||
labels_dump_ok:
|
|
||||||
mov eax,edi
|
|
||||||
sub eax,ebx
|
|
||||||
mov [ebx-38h+14h],eax
|
|
||||||
add eax,38h
|
|
||||||
mov [ebx-38h+18h],eax
|
|
||||||
mov ecx,[memory_end]
|
|
||||||
sub ecx,[labels_list]
|
|
||||||
mov [ebx-38h+1Ch],ecx
|
|
||||||
add eax,ecx
|
|
||||||
mov [ebx-38h+20h],eax
|
|
||||||
mov ecx,[source_start]
|
|
||||||
sub ecx,[memory_start]
|
|
||||||
mov [ebx-38h+24h],ecx
|
|
||||||
add eax,ecx
|
|
||||||
mov [ebx-38h+28h],eax
|
|
||||||
mov eax,[number_of_sections]
|
|
||||||
shl eax,2
|
|
||||||
mov [ebx-38h+34h],eax
|
|
||||||
mov esi,[memory_start]
|
|
||||||
prepare_preprocessed_source:
|
|
||||||
cmp esi,[source_start]
|
|
||||||
jae preprocessed_source_ok
|
|
||||||
mov eax,[memory_start]
|
|
||||||
mov edx,[input_file]
|
|
||||||
cmp [esi],edx
|
|
||||||
jne line_not_from_main_input
|
|
||||||
mov [esi],eax
|
|
||||||
line_not_from_main_input:
|
|
||||||
sub [esi],eax
|
|
||||||
test byte [esi+7],1 shl 7
|
|
||||||
jz prepare_next_preprocessed_line
|
|
||||||
sub [esi+8],eax
|
|
||||||
sub [esi+12],eax
|
|
||||||
prepare_next_preprocessed_line:
|
|
||||||
add esi,16
|
|
||||||
skip_preprocessed_line:
|
|
||||||
lods byte [esi]
|
|
||||||
cmp al,1Ah
|
|
||||||
je skip_preprocessed_symbol
|
|
||||||
cmp al,3Bh
|
|
||||||
je skip_preprocessed_symbol
|
|
||||||
cmp al,22h
|
|
||||||
je skip_preprocessed_string
|
|
||||||
or al,al
|
|
||||||
jnz skip_preprocessed_line
|
|
||||||
jmp prepare_preprocessed_source
|
|
||||||
skip_preprocessed_string:
|
|
||||||
lods dword [esi]
|
|
||||||
add esi,eax
|
|
||||||
jmp skip_preprocessed_line
|
|
||||||
skip_preprocessed_symbol:
|
|
||||||
lods byte [esi]
|
|
||||||
movzx eax,al
|
|
||||||
add esi,eax
|
|
||||||
jmp skip_preprocessed_line
|
|
||||||
preprocessed_source_ok:
|
|
||||||
mov esi,[labels_list]
|
|
||||||
mov ebp,edi
|
|
||||||
make_lines_dump:
|
|
||||||
cmp esi,[display_buffer]
|
|
||||||
je lines_dump_ok
|
|
||||||
mov eax,[esi-4]
|
|
||||||
mov ecx,[esi-8]
|
|
||||||
sub esi,8
|
|
||||||
sub esi,ecx
|
|
||||||
cmp eax,1
|
|
||||||
jne make_lines_dump
|
|
||||||
mov eax,[esi+4]
|
|
||||||
sub eax,[code_start]
|
|
||||||
add eax,[headers_size]
|
|
||||||
cmp byte [esi+1Ah],0
|
|
||||||
je store_offset
|
|
||||||
xor eax,eax
|
|
||||||
store_offset:
|
|
||||||
stos dword [edi]
|
|
||||||
mov eax,[esi]
|
|
||||||
sub eax,[memory_start]
|
|
||||||
stos dword [edi]
|
|
||||||
mov eax,[esi+4]
|
|
||||||
xor edx,edx
|
|
||||||
sub eax,[esi+8]
|
|
||||||
sbb edx,[esi+8+4]
|
|
||||||
stos dword [edi]
|
|
||||||
mov eax,edx
|
|
||||||
stos dword [edi]
|
|
||||||
mov eax,[esi+10h]
|
|
||||||
stos dword [edi]
|
|
||||||
mov eax,[esi+14h]
|
|
||||||
test eax,eax
|
|
||||||
jz base_symbol_for_line_ok
|
|
||||||
cmp eax,[symbols_stream]
|
|
||||||
mov eax,[eax+4]
|
|
||||||
jae base_symbol_for_line_ok
|
|
||||||
xor eax,eax
|
|
||||||
base_symbol_for_line_ok:
|
|
||||||
stos dword [edi]
|
|
||||||
mov eax,[esi+18h]
|
|
||||||
and eax,001FFFFh
|
|
||||||
stos dword [edi]
|
|
||||||
jmp make_lines_dump
|
|
||||||
lines_dump_ok:
|
|
||||||
mov edx,edi
|
|
||||||
mov eax,[current_offset]
|
|
||||||
sub eax,[code_start]
|
|
||||||
add eax,[headers_size]
|
|
||||||
stos dword [edi]
|
|
||||||
mov ecx,edi
|
|
||||||
sub ecx,ebx
|
|
||||||
sub ecx,[ebx-38h+14h]
|
|
||||||
mov [ebx-38h+2Ch],ecx
|
|
||||||
add ecx,[ebx-38h+28h]
|
|
||||||
mov [ebx-38h+30h],ecx
|
|
||||||
find_inexisting_offsets:
|
|
||||||
sub edx,1Ch
|
|
||||||
cmp edx,ebp
|
|
||||||
jb write_symbols
|
|
||||||
test byte [edx+1Ah],1
|
|
||||||
jnz find_inexisting_offsets
|
|
||||||
cmp eax,[edx]
|
|
||||||
jb correct_inexisting_offset
|
|
||||||
mov eax,[edx]
|
|
||||||
jmp find_inexisting_offsets
|
|
||||||
correct_inexisting_offset:
|
|
||||||
mov dword [edx],0
|
|
||||||
or byte [edx+1Ah],2
|
|
||||||
jmp find_inexisting_offsets
|
|
||||||
write_symbols:
|
|
||||||
mov edx,[symbols_file]
|
|
||||||
call create
|
|
||||||
jc write_failed
|
|
||||||
mov edx,[code_start]
|
|
||||||
mov ecx,[edx+14h]
|
|
||||||
add ecx,38h
|
|
||||||
call write
|
|
||||||
mov edx,[display_buffer]
|
|
||||||
mov ecx,[memory_end]
|
|
||||||
sub ecx,[labels_list]
|
|
||||||
call write
|
|
||||||
mov edx,[memory_start]
|
|
||||||
mov ecx,[source_start]
|
|
||||||
sub ecx,edx
|
|
||||||
call write
|
|
||||||
mov edx,ebp
|
|
||||||
mov ecx,edi
|
|
||||||
sub ecx,edx
|
|
||||||
call write
|
|
||||||
mov edx,[free_additional_memory]
|
|
||||||
mov ecx,[number_of_sections]
|
|
||||||
shl ecx,2
|
|
||||||
call write
|
|
||||||
call close
|
|
||||||
ret
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
; flat assembler core
|
; flat assembler core
|
||||||
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
; Copyright (c) 1999-2011, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
|
|
||||||
_out_of_memory db 'out of memory',0
|
_out_of_memory db 'out of memory',0
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
; flat assembler core
|
; flat assembler core
|
||||||
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
; Copyright (c) 1999-2011, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
|
|
||||||
parser:
|
parser:
|
||||||
@ -33,6 +33,7 @@ parser:
|
|||||||
inc [parsed_lines]
|
inc [parsed_lines]
|
||||||
add esi,16
|
add esi,16
|
||||||
parse_line:
|
parse_line:
|
||||||
|
mov [formatter_symbols_allowed],0
|
||||||
cmp byte [esi],1Ah
|
cmp byte [esi],1Ah
|
||||||
jne empty_instruction
|
jne empty_instruction
|
||||||
push edi
|
push edi
|
||||||
@ -461,13 +462,22 @@ parse_line_contents:
|
|||||||
cmp bx,label_directive-instruction_handler
|
cmp bx,label_directive-instruction_handler
|
||||||
je parse_label_directive
|
je parse_label_directive
|
||||||
cmp bx,segment_directive-instruction_handler
|
cmp bx,segment_directive-instruction_handler
|
||||||
je parse_label_directive
|
je parse_segment_directive
|
||||||
cmp bx,load_directive-instruction_handler
|
cmp bx,load_directive-instruction_handler
|
||||||
je parse_load_directive
|
je parse_load_directive
|
||||||
cmp bx,extrn_directive-instruction_handler
|
cmp bx,extrn_directive-instruction_handler
|
||||||
je parse_extrn_directive
|
je parse_extrn_directive
|
||||||
cmp bx,public_directive-instruction_handler
|
cmp bx,public_directive-instruction_handler
|
||||||
je parse_public_directive
|
je parse_public_directive
|
||||||
|
cmp bx,section_directive-instruction_handler
|
||||||
|
je parse_formatter_argument
|
||||||
|
cmp bx,format_directive-instruction_handler
|
||||||
|
je parse_formatter_argument
|
||||||
|
cmp bx,data_directive-instruction_handler
|
||||||
|
je parse_formatter_argument
|
||||||
|
jmp parse_argument
|
||||||
|
parse_formatter_argument:
|
||||||
|
or [formatter_symbols_allowed],-1
|
||||||
parse_argument:
|
parse_argument:
|
||||||
lea eax,[edi+100h]
|
lea eax,[edi+100h]
|
||||||
cmp eax,[labels_list]
|
cmp eax,[labels_list]
|
||||||
@ -536,6 +546,8 @@ parse_line_contents:
|
|||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
cmp al,80h
|
cmp al,80h
|
||||||
je forced_expression
|
je forced_expression
|
||||||
|
cmp al,8Ch
|
||||||
|
je forced_expression
|
||||||
cmp al,81h
|
cmp al,81h
|
||||||
je forced_parenthesis
|
je forced_parenthesis
|
||||||
cmp al,82h
|
cmp al,82h
|
||||||
@ -577,6 +589,8 @@ parse_line_contents:
|
|||||||
jne allow_embedded_instruction
|
jne allow_embedded_instruction
|
||||||
movs byte [edi],[esi]
|
movs byte [edi],[esi]
|
||||||
jmp allow_embedded_instruction
|
jmp allow_embedded_instruction
|
||||||
|
parse_segment_directive:
|
||||||
|
or [formatter_symbols_allowed],-1
|
||||||
parse_label_directive:
|
parse_label_directive:
|
||||||
cmp byte [esi],1Ah
|
cmp byte [esi],1Ah
|
||||||
jne argument_parsed
|
jne argument_parsed
|
||||||
@ -623,7 +637,9 @@ parse_line_contents:
|
|||||||
inc esi
|
inc esi
|
||||||
push esi ecx
|
push esi ecx
|
||||||
push edi
|
push edi
|
||||||
|
or [formatter_symbols_allowed],-1
|
||||||
call get_symbol
|
call get_symbol
|
||||||
|
mov [formatter_symbols_allowed],0
|
||||||
pop edi
|
pop edi
|
||||||
jc parse_public_label
|
jc parse_public_label
|
||||||
cmp al,1Dh
|
cmp al,1Dh
|
||||||
@ -787,11 +803,16 @@ parse_line_contents:
|
|||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
jmp expression_parsed
|
jmp expression_parsed
|
||||||
forced_expression:
|
forced_expression:
|
||||||
|
xor al,al
|
||||||
|
xchg al,[formatter_symbols_allowed]
|
||||||
|
push eax
|
||||||
mov al,'('
|
mov al,'('
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
call convert_expression
|
call convert_expression
|
||||||
mov al,')'
|
mov al,')'
|
||||||
stos byte [edi]
|
stos byte [edi]
|
||||||
|
pop eax
|
||||||
|
mov [formatter_symbols_allowed],al
|
||||||
jmp argument_parsed
|
jmp argument_parsed
|
||||||
address_argument:
|
address_argument:
|
||||||
call parse_address
|
call parse_address
|
||||||
@ -1009,9 +1030,16 @@ get_symbol:
|
|||||||
repe cmps byte [esi],[edi]
|
repe cmps byte [esi],[edi]
|
||||||
ja symbols_up
|
ja symbols_up
|
||||||
jb symbols_down
|
jb symbols_down
|
||||||
|
mov ax,[edi]
|
||||||
|
|
||||||
|
cmp al,18h
|
||||||
|
jb symbol_ok
|
||||||
|
cmp [formatter_symbols_allowed],0
|
||||||
|
je no_symbol
|
||||||
|
|
||||||
|
symbol_ok:
|
||||||
pop esi
|
pop esi
|
||||||
add esi,ebp
|
add esi,ebp
|
||||||
mov ax,[edi]
|
|
||||||
clc
|
clc
|
||||||
ret
|
ret
|
||||||
no_symbol:
|
no_symbol:
|
||||||
@ -1047,7 +1075,7 @@ get_instruction:
|
|||||||
mov ebp,ecx
|
mov ebp,ecx
|
||||||
call lower_case
|
call lower_case
|
||||||
mov ecx,ebp
|
mov ecx,ebp
|
||||||
cmp cl,11
|
cmp cl,16
|
||||||
ja no_instruction
|
ja no_instruction
|
||||||
sub cl,2
|
sub cl,2
|
||||||
jc no_instruction
|
jc no_instruction
|
||||||
@ -1157,9 +1185,13 @@ get_label_id:
|
|||||||
ret
|
ret
|
||||||
anonymous_back:
|
anonymous_back:
|
||||||
mov eax,[anonymous_reverse]
|
mov eax,[anonymous_reverse]
|
||||||
or eax,eax
|
|
||||||
jz new_anonymous
|
|
||||||
add esi,2
|
add esi,2
|
||||||
|
or eax,eax
|
||||||
|
jz bogus_anonymous
|
||||||
|
jmp anonymous_ok
|
||||||
|
bogus_anonymous:
|
||||||
|
call allocate_label
|
||||||
|
mov [anonymous_reverse],eax
|
||||||
jmp anonymous_ok
|
jmp anonymous_ok
|
||||||
new_anonymous:
|
new_anonymous:
|
||||||
add esi,2
|
add esi,2
|
||||||
@ -1175,7 +1207,15 @@ get_label_id:
|
|||||||
cmp byte [esi],'%'
|
cmp byte [esi],'%'
|
||||||
je get_predefined_id
|
je get_predefined_id
|
||||||
cmp byte [esi],'$'
|
cmp byte [esi],'$'
|
||||||
|
je current_address_label
|
||||||
|
cmp byte [esi],'?'
|
||||||
jne find_label
|
jne find_label
|
||||||
|
cmp ecx,1
|
||||||
|
jne find_label
|
||||||
|
inc esi
|
||||||
|
mov eax,0Fh
|
||||||
|
ret
|
||||||
|
current_address_label:
|
||||||
cmp ecx,2
|
cmp ecx,2
|
||||||
ja find_label
|
ja find_label
|
||||||
inc esi
|
inc esi
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
; flat assembler core
|
; flat assembler core
|
||||||
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
; Copyright (c) 1999-2011, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
|
|
||||||
preprocessor:
|
preprocessor:
|
||||||
@ -96,6 +96,8 @@ preprocess_file:
|
|||||||
call preprocess_line
|
call preprocess_line
|
||||||
pop edx ebx
|
pop edx ebx
|
||||||
next_line:
|
next_line:
|
||||||
|
cmp byte [esi-1],0
|
||||||
|
je file_end
|
||||||
cmp byte [esi-1],1Ah
|
cmp byte [esi-1],1Ah
|
||||||
jne preprocess_source
|
jne preprocess_source
|
||||||
file_end:
|
file_end:
|
||||||
@ -219,6 +221,8 @@ convert_line:
|
|||||||
je concatenate_lines
|
je concatenate_lines
|
||||||
cmp al,1Ah
|
cmp al,1Ah
|
||||||
je unexpected_end_of_file
|
je unexpected_end_of_file
|
||||||
|
or al,al
|
||||||
|
jz unexpected_end_of_file
|
||||||
cmp al,0Ah
|
cmp al,0Ah
|
||||||
je concatenate_lf
|
je concatenate_lf
|
||||||
cmp al,0Dh
|
cmp al,0Dh
|
||||||
@ -241,6 +245,8 @@ convert_line:
|
|||||||
backslashed_symbol:
|
backslashed_symbol:
|
||||||
cmp al,1Ah
|
cmp al,1Ah
|
||||||
je unexpected_end_of_file
|
je unexpected_end_of_file
|
||||||
|
or al,al
|
||||||
|
jz unexpected_end_of_file
|
||||||
cmp al,0Ah
|
cmp al,0Ah
|
||||||
je extra_characters_on_line
|
je extra_characters_on_line
|
||||||
cmp al,0Dh
|
cmp al,0Dh
|
||||||
@ -283,6 +289,8 @@ convert_line:
|
|||||||
je concatenate_lines
|
je concatenate_lines
|
||||||
cmp al,1Ah
|
cmp al,1Ah
|
||||||
je unexpected_end_of_file
|
je unexpected_end_of_file
|
||||||
|
or al,al
|
||||||
|
jz unexpected_end_of_file
|
||||||
cmp al,0Ah
|
cmp al,0Ah
|
||||||
je concatenate_lf
|
je concatenate_lf
|
||||||
cmp al,0Dh
|
cmp al,0Dh
|
||||||
@ -1594,6 +1602,7 @@ use_instant_macro:
|
|||||||
stosb
|
stosb
|
||||||
push esi
|
push esi
|
||||||
mov esi,[esp+4]
|
mov esi,[esp+4]
|
||||||
|
mov [value_size],8
|
||||||
call calculate_expression
|
call calculate_expression
|
||||||
mov eax,[edi]
|
mov eax,[edi]
|
||||||
mov ecx,[edi+4]
|
mov ecx,[edi+4]
|
||||||
@ -1887,6 +1896,12 @@ process_macro:
|
|||||||
je process_macro_line
|
je process_macro_line
|
||||||
inc [counter]
|
inc [counter]
|
||||||
process_macro_line:
|
process_macro_line:
|
||||||
|
lods byte [esi]
|
||||||
|
or al,al
|
||||||
|
jz process_next_line
|
||||||
|
cmp al,'}'
|
||||||
|
je macro_block_processed
|
||||||
|
dec esi
|
||||||
mov [current_line],edi
|
mov [current_line],edi
|
||||||
lea eax,[edi+10h]
|
lea eax,[edi+10h]
|
||||||
cmp eax,[memory_end]
|
cmp eax,[memory_end]
|
||||||
|
@ -1,110 +1,390 @@
|
|||||||
symbol_dump:
|
|
||||||
|
|
||||||
push edi
|
; flat assembler core
|
||||||
mov edx,[memory_end]
|
; Copyright (c) 1999-2011, Tomasz Grysztar.
|
||||||
symb_dump:
|
; All rights reserved.
|
||||||
cmp edx,[labels_list]
|
|
||||||
jbe symbols_dumped
|
dump_symbols:
|
||||||
sub edx,LABEL_STRUCTURE_SIZE
|
mov edi,[code_start]
|
||||||
cmp dword [edx+24],0
|
call setup_dump_header
|
||||||
je symb_dump ; do not dump anonymous symbols
|
mov esi,[input_file]
|
||||||
test byte [edx+8],1
|
call copy_asciiz
|
||||||
jz symb_dump ; do not dump symbols that didn't get defined
|
cmp edi,[display_buffer]
|
||||||
|
jae out_of_memory
|
||||||
|
mov eax,edi
|
||||||
|
sub eax,ebx
|
||||||
|
mov [ebx-38h+0Ch],eax
|
||||||
|
mov esi,[output_file]
|
||||||
|
call copy_asciiz
|
||||||
|
cmp edi,[display_buffer]
|
||||||
|
jae out_of_memory
|
||||||
|
mov edx,[symbols_stream]
|
||||||
|
mov ebp,[free_additional_memory]
|
||||||
|
mov [number_of_sections],0
|
||||||
|
cmp [output_format],4
|
||||||
|
je prepare_strings_table
|
||||||
|
cmp [output_format],5
|
||||||
|
jne strings_table_ready
|
||||||
|
bt [format_flags],0
|
||||||
|
jc strings_table_ready
|
||||||
|
prepare_strings_table:
|
||||||
|
cmp edx,ebp
|
||||||
|
je strings_table_ready
|
||||||
|
mov al,[edx]
|
||||||
|
test al,al
|
||||||
|
jz prepare_string
|
||||||
|
cmp al,80h
|
||||||
|
je prepare_string
|
||||||
|
add edx,0Ch
|
||||||
|
cmp al,0C0h
|
||||||
|
jb prepare_strings_table
|
||||||
|
add edx,4
|
||||||
|
jmp prepare_strings_table
|
||||||
|
prepare_string:
|
||||||
|
mov esi,edi
|
||||||
|
sub esi,ebx
|
||||||
|
xchg esi,[edx+4]
|
||||||
|
test al,al
|
||||||
|
jz prepare_section_string
|
||||||
|
or dword [edx+4],1 shl 31
|
||||||
|
add edx,0Ch
|
||||||
|
prepare_external_string:
|
||||||
|
mov ecx,[esi]
|
||||||
|
add esi,4
|
||||||
|
rep movs byte [edi],[esi]
|
||||||
|
mov byte [edi],0
|
||||||
|
inc edi
|
||||||
|
cmp edi,[display_buffer]
|
||||||
|
jae out_of_memory
|
||||||
|
jmp prepare_strings_table
|
||||||
|
prepare_section_string:
|
||||||
|
mov ecx,[number_of_sections]
|
||||||
|
mov eax,ecx
|
||||||
|
inc eax
|
||||||
|
mov [number_of_sections],eax
|
||||||
|
xchg eax,[edx+4]
|
||||||
|
shl ecx,2
|
||||||
|
add ecx,[free_additional_memory]
|
||||||
|
mov [ecx],eax
|
||||||
|
add edx,20h
|
||||||
|
test esi,esi
|
||||||
|
jz prepare_default_section_string
|
||||||
|
cmp [output_format],5
|
||||||
|
jne prepare_external_string
|
||||||
|
bt [format_flags],0
|
||||||
|
jc prepare_external_string
|
||||||
|
mov esi,[esi]
|
||||||
|
add esi,[resource_data]
|
||||||
|
copy_elf_section_name:
|
||||||
|
lods byte [esi]
|
||||||
|
cmp edi,[display_buffer]
|
||||||
|
jae out_of_memory
|
||||||
|
stos byte [edi]
|
||||||
|
test al,al
|
||||||
|
jnz copy_elf_section_name
|
||||||
|
jmp prepare_strings_table
|
||||||
|
prepare_default_section_string:
|
||||||
|
mov eax,'.fla'
|
||||||
|
stos dword [edi]
|
||||||
|
mov ax,'t'
|
||||||
|
stos word [edi]
|
||||||
|
cmp edi,[display_buffer]
|
||||||
|
jae out_of_memory
|
||||||
|
jmp prepare_strings_table
|
||||||
|
strings_table_ready:
|
||||||
|
mov edx,[display_buffer]
|
||||||
|
mov ebp,[memory_end]
|
||||||
|
sub ebp,[labels_list]
|
||||||
|
add ebp,edx
|
||||||
|
prepare_labels_dump:
|
||||||
|
cmp edx,ebp
|
||||||
|
je labels_dump_ok
|
||||||
|
mov eax,[edx+24]
|
||||||
|
test eax,eax
|
||||||
|
jz label_dump_name_ok
|
||||||
|
cmp eax,[memory_start]
|
||||||
|
jb label_name_outside_source
|
||||||
|
cmp eax,[source_start]
|
||||||
|
ja label_name_outside_source
|
||||||
|
sub eax,[memory_start]
|
||||||
|
dec eax
|
||||||
|
mov [edx+24],eax
|
||||||
|
jmp label_dump_name_ok
|
||||||
|
label_name_outside_source:
|
||||||
|
mov esi,eax
|
||||||
|
mov eax,edi
|
||||||
|
sub eax,ebx
|
||||||
|
or eax,1 shl 31
|
||||||
|
mov [edx+24],eax
|
||||||
|
movzx ecx,byte [esi-1]
|
||||||
|
lea eax,[edi+ecx+1]
|
||||||
|
cmp edi,[display_buffer]
|
||||||
|
jae out_of_memory
|
||||||
|
rep movsb
|
||||||
|
xor al,al
|
||||||
|
stosb
|
||||||
|
label_dump_name_ok:
|
||||||
|
mov eax,[edx+28]
|
||||||
|
test eax,eax
|
||||||
|
jz label_dump_line_ok
|
||||||
|
sub eax,[memory_start]
|
||||||
|
mov [edx+28],eax
|
||||||
|
label_dump_line_ok:
|
||||||
|
mov eax,[edx+20]
|
||||||
|
test eax,eax
|
||||||
|
jz base_symbol_for_label_ok
|
||||||
|
cmp eax,[symbols_stream]
|
||||||
|
mov eax,[eax+4]
|
||||||
|
jae base_symbol_for_label_ok
|
||||||
|
xor eax,eax
|
||||||
|
base_symbol_for_label_ok:
|
||||||
|
mov [edx+20],eax
|
||||||
mov ax,[current_pass]
|
mov ax,[current_pass]
|
||||||
cmp ax,[edx+16]
|
cmp ax,[edx+16]
|
||||||
jne symb_dump
|
je label_defined_flag_ok
|
||||||
test byte [edx+8],4 or 2
|
and byte [edx+8],not 1
|
||||||
jnz symb_dump ; do not dump assembly-time variables
|
label_defined_flag_ok:
|
||||||
; do not dump variables defined with '='
|
cmp ax,[edx+18]
|
||||||
cmp word [edx+12], 0
|
je label_used_flag_ok
|
||||||
jnz symb_dump ; do not dump register-based variables
|
and byte [edx+8],not 8
|
||||||
|
label_used_flag_ok:
|
||||||
mov al, '0'
|
add edx,LABEL_STRUCTURE_SIZE
|
||||||
stosb
|
jmp prepare_labels_dump
|
||||||
mov al, 'x'
|
labels_dump_ok:
|
||||||
stosb
|
mov eax,edi
|
||||||
mov eax, [edx+4]
|
sub eax,ebx
|
||||||
mov ecx, 8
|
mov [ebx-38h+14h],eax
|
||||||
@@:
|
add eax,38h
|
||||||
rol eax, 4
|
mov [ebx-38h+18h],eax
|
||||||
test al, 0xF
|
mov ecx,[memory_end]
|
||||||
loopz @b
|
sub ecx,[labels_list]
|
||||||
jz .nohigh
|
mov [ebx-38h+1Ch],ecx
|
||||||
inc ecx
|
add eax,ecx
|
||||||
@@:
|
mov [ebx-38h+20h],eax
|
||||||
push eax
|
mov ecx,[source_start]
|
||||||
and al, 0xF
|
sub ecx,[memory_start]
|
||||||
cmp al, 10
|
mov [ebx-38h+24h],ecx
|
||||||
sbb al, 69h
|
add eax,ecx
|
||||||
das
|
mov [ebx-38h+28h],eax
|
||||||
stosb
|
mov eax,[number_of_sections]
|
||||||
pop eax
|
shl eax,2
|
||||||
rol eax, 4
|
mov [ebx-38h+34h],eax
|
||||||
loop @b
|
call prepare_preprocessed_source
|
||||||
mov eax, [edx]
|
mov esi,[labels_list]
|
||||||
mov ecx, 8
|
mov ebp,edi
|
||||||
jmp .low
|
make_lines_dump:
|
||||||
.nohigh:
|
cmp esi,[display_buffer]
|
||||||
mov eax, [edx]
|
je lines_dump_ok
|
||||||
mov ecx, 8
|
mov eax,[esi-4]
|
||||||
@@:
|
mov ecx,[esi-8]
|
||||||
rol eax, 4
|
sub esi,8
|
||||||
test al, 0xF
|
sub esi,ecx
|
||||||
loopz @b
|
cmp eax,1
|
||||||
inc ecx
|
jne make_lines_dump
|
||||||
.low:
|
mov eax,[esi+4]
|
||||||
push eax
|
sub eax,[code_start]
|
||||||
and al, 0xF
|
add eax,[headers_size]
|
||||||
cmp al, 10
|
cmp byte [esi+1Ah],0
|
||||||
sbb al, 69h
|
je store_offset
|
||||||
das
|
xor eax,eax
|
||||||
stosb
|
store_offset:
|
||||||
pop eax
|
stos dword [edi]
|
||||||
rol eax, 4
|
mov eax,[esi]
|
||||||
loop .low
|
sub eax,[memory_start]
|
||||||
|
stos dword [edi]
|
||||||
mov al, ' '
|
mov eax,[esi+4]
|
||||||
stosb
|
xor edx,edx
|
||||||
|
sub eax,[esi+8]
|
||||||
mov esi,[edx+24]
|
sbb edx,[esi+8+4]
|
||||||
movzx ecx,byte [esi-1]
|
stos dword [edi]
|
||||||
rep movsb
|
mov eax,edx
|
||||||
|
stos dword [edi]
|
||||||
mov ax,0A0Dh
|
mov eax,[esi+10h]
|
||||||
stosw
|
stos dword [edi]
|
||||||
|
mov eax,[esi+14h]
|
||||||
jmp symb_dump
|
test eax,eax
|
||||||
|
jz base_symbol_for_line_ok
|
||||||
symbols_dumped:
|
cmp eax,[symbols_stream]
|
||||||
mov edx,dbgfilename
|
mov eax,[eax+4]
|
||||||
push esi edi
|
jae base_symbol_for_line_ok
|
||||||
mov esi, outfile
|
xor eax,eax
|
||||||
mov edi, edx
|
base_symbol_for_line_ok:
|
||||||
@@:
|
stos dword [edi]
|
||||||
lodsb
|
mov eax,[esi+18h]
|
||||||
stosb
|
and eax,001FFFFh
|
||||||
test al, al
|
stos dword [edi]
|
||||||
jnz @b
|
cmp edi,[display_buffer]
|
||||||
lea ecx, [edi-1]
|
jae out_of_memory
|
||||||
@@:
|
jmp make_lines_dump
|
||||||
dec edi
|
lines_dump_ok:
|
||||||
cmp edi, edx
|
mov edx,edi
|
||||||
jb @f
|
mov eax,[current_offset]
|
||||||
cmp byte [edi], '/'
|
sub eax,[code_start]
|
||||||
jz @f
|
add eax,[headers_size]
|
||||||
cmp byte [edi], '.'
|
stos dword [edi]
|
||||||
jnz @b
|
mov ecx,edi
|
||||||
mov ecx, edi
|
sub ecx,ebx
|
||||||
@@:
|
sub ecx,[ebx-38h+14h]
|
||||||
mov dword [ecx], '.dbg'
|
mov [ebx-38h+2Ch],ecx
|
||||||
mov byte [ecx+4], 0
|
add ecx,[ebx-38h+28h]
|
||||||
pop edi esi
|
mov [ebx-38h+30h],ecx
|
||||||
|
find_inexisting_offsets:
|
||||||
|
sub edx,1Ch
|
||||||
|
cmp edx,ebp
|
||||||
|
jb write_symbols
|
||||||
|
test byte [edx+1Ah],1
|
||||||
|
jnz find_inexisting_offsets
|
||||||
|
cmp eax,[edx]
|
||||||
|
jb correct_inexisting_offset
|
||||||
|
mov eax,[edx]
|
||||||
|
jmp find_inexisting_offsets
|
||||||
|
correct_inexisting_offset:
|
||||||
|
mov dword [edx],0
|
||||||
|
or byte [edx+1Ah],2
|
||||||
|
jmp find_inexisting_offsets
|
||||||
|
write_symbols:
|
||||||
|
mov edx,[symbols_file]
|
||||||
call create
|
call create
|
||||||
mov edx,[esp]
|
jc write_failed
|
||||||
|
mov edx,[code_start]
|
||||||
|
mov ecx,[edx+14h]
|
||||||
|
add ecx,38h
|
||||||
|
call write
|
||||||
|
jc write_failed
|
||||||
|
mov edx,[display_buffer]
|
||||||
|
mov ecx,[memory_end]
|
||||||
|
sub ecx,[labels_list]
|
||||||
|
call write
|
||||||
|
jc write_failed
|
||||||
|
mov edx,[memory_start]
|
||||||
|
mov ecx,[source_start]
|
||||||
|
sub ecx,edx
|
||||||
|
call write
|
||||||
|
jc write_failed
|
||||||
|
mov edx,ebp
|
||||||
mov ecx,edi
|
mov ecx,edi
|
||||||
sub ecx,edx
|
sub ecx,edx
|
||||||
call write
|
call write
|
||||||
|
jc write_failed
|
||||||
|
mov edx,[free_additional_memory]
|
||||||
|
mov ecx,[number_of_sections]
|
||||||
|
shl ecx,2
|
||||||
|
call write
|
||||||
|
jc write_failed
|
||||||
call close
|
call close
|
||||||
pop edi
|
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
setup_dump_header:
|
||||||
|
xor eax,eax
|
||||||
|
mov ecx,38h shr 2
|
||||||
|
rep stos dword [edi]
|
||||||
|
mov ebx,edi
|
||||||
|
mov dword [ebx-38h],'fas'+1Ah shl 24
|
||||||
|
mov dword [ebx-38h+4],VERSION_MAJOR + VERSION_MINOR shl 8 + 38h shl 16
|
||||||
|
mov dword [ebx-38h+10h],38h
|
||||||
|
ret
|
||||||
|
prepare_preprocessed_source:
|
||||||
|
mov esi,[memory_start]
|
||||||
|
mov ebp,[source_start]
|
||||||
|
test ebp,ebp
|
||||||
|
jnz prepare_preprocessed_line
|
||||||
|
mov ebp,[current_line]
|
||||||
|
inc ebp
|
||||||
|
prepare_preprocessed_line:
|
||||||
|
cmp esi,ebp
|
||||||
|
jae preprocessed_source_ok
|
||||||
|
mov eax,[memory_start]
|
||||||
|
mov edx,[input_file]
|
||||||
|
cmp [esi],edx
|
||||||
|
jne line_not_from_main_input
|
||||||
|
mov [esi],eax
|
||||||
|
line_not_from_main_input:
|
||||||
|
sub [esi],eax
|
||||||
|
test byte [esi+7],1 shl 7
|
||||||
|
jz prepare_next_preprocessed_line
|
||||||
|
sub [esi+8],eax
|
||||||
|
sub [esi+12],eax
|
||||||
|
prepare_next_preprocessed_line:
|
||||||
|
call skip_preprocessed_line
|
||||||
|
jmp prepare_preprocessed_line
|
||||||
|
preprocessed_source_ok:
|
||||||
|
ret
|
||||||
|
skip_preprocessed_line:
|
||||||
|
add esi,16
|
||||||
|
skip_preprocessed_line_content:
|
||||||
|
lods byte [esi]
|
||||||
|
cmp al,1Ah
|
||||||
|
je skip_preprocessed_symbol
|
||||||
|
cmp al,3Bh
|
||||||
|
je skip_preprocessed_symbol
|
||||||
|
cmp al,22h
|
||||||
|
je skip_preprocessed_string
|
||||||
|
or al,al
|
||||||
|
jnz skip_preprocessed_line_content
|
||||||
|
ret
|
||||||
|
skip_preprocessed_string:
|
||||||
|
lods dword [esi]
|
||||||
|
add esi,eax
|
||||||
|
jmp skip_preprocessed_line_content
|
||||||
|
skip_preprocessed_symbol:
|
||||||
|
lods byte [esi]
|
||||||
|
movzx eax,al
|
||||||
|
add esi,eax
|
||||||
|
jmp skip_preprocessed_line_content
|
||||||
|
restore_preprocessed_source:
|
||||||
|
mov esi,[memory_start]
|
||||||
|
mov ebp,[source_start]
|
||||||
|
test ebp,ebp
|
||||||
|
jnz restore_preprocessed_line
|
||||||
|
mov ebp,[current_line]
|
||||||
|
inc ebp
|
||||||
|
restore_preprocessed_line:
|
||||||
|
cmp esi,ebp
|
||||||
|
jae preprocessed_source_restored
|
||||||
|
mov eax,[memory_start]
|
||||||
|
add [esi],eax
|
||||||
|
cmp [esi],eax
|
||||||
|
jne preprocessed_line_source_restored
|
||||||
|
mov edx,[input_file]
|
||||||
|
mov [esi],edx
|
||||||
|
preprocessed_line_source_restored:
|
||||||
|
test byte [esi+7],1 shl 7
|
||||||
|
jz restore_next_preprocessed_line
|
||||||
|
add [esi+8],eax
|
||||||
|
add [esi+12],eax
|
||||||
|
restore_next_preprocessed_line:
|
||||||
|
call skip_preprocessed_line
|
||||||
|
jmp restore_preprocessed_line
|
||||||
|
preprocessed_source_restored:
|
||||||
|
ret
|
||||||
|
dump_preprocessed_source:
|
||||||
|
mov edi,[free_additional_memory]
|
||||||
|
call setup_dump_header
|
||||||
|
mov esi,[input_file]
|
||||||
|
call copy_asciiz
|
||||||
|
cmp edi,[additional_memory_end]
|
||||||
|
jae out_of_memory
|
||||||
|
mov eax,edi
|
||||||
|
sub eax,ebx
|
||||||
|
dec eax
|
||||||
|
mov [ebx-38h+0Ch],eax
|
||||||
|
mov eax,edi
|
||||||
|
sub eax,ebx
|
||||||
|
mov [ebx-38h+14h],eax
|
||||||
|
add eax,38h
|
||||||
|
mov [ebx-38h+20h],eax
|
||||||
|
call prepare_preprocessed_source
|
||||||
|
sub esi,[memory_start]
|
||||||
|
mov [ebx-38h+24h],esi
|
||||||
|
mov edx,[symbols_file]
|
||||||
|
call create
|
||||||
|
jc write_failed
|
||||||
|
mov edx,[free_additional_memory]
|
||||||
|
mov ecx,[edx+14h]
|
||||||
|
add ecx,38h
|
||||||
|
call write
|
||||||
|
jc write_failed
|
||||||
|
mov edx,[memory_start]
|
||||||
|
mov ecx,esi
|
||||||
|
call write
|
||||||
|
jc write_failed
|
||||||
|
call close
|
||||||
|
ret
|
@ -98,6 +98,117 @@ make_timestamp:
|
|||||||
pop ebx
|
pop ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
symbol_dump:
|
||||||
|
|
||||||
|
push edi
|
||||||
|
mov edx,[memory_end]
|
||||||
|
symb_dump:
|
||||||
|
cmp edx,[labels_list]
|
||||||
|
jbe symbols_dumped
|
||||||
|
sub edx,LABEL_STRUCTURE_SIZE
|
||||||
|
cmp dword [edx+24],0
|
||||||
|
je symb_dump ; do not dump anonymous symbols
|
||||||
|
test byte [edx+8],1
|
||||||
|
jz symb_dump ; do not dump symbols that didn't get defined
|
||||||
|
mov ax,[current_pass]
|
||||||
|
cmp ax,[edx+16]
|
||||||
|
jne symb_dump
|
||||||
|
test byte [edx+8],4 or 2
|
||||||
|
jnz symb_dump ; do not dump assembly-time variables
|
||||||
|
; do not dump variables defined with '='
|
||||||
|
cmp word [edx+12], 0
|
||||||
|
jnz symb_dump ; do not dump register-based variables
|
||||||
|
|
||||||
|
mov al, '0'
|
||||||
|
stosb
|
||||||
|
mov al, 'x'
|
||||||
|
stosb
|
||||||
|
mov eax, [edx+4]
|
||||||
|
mov ecx, 8
|
||||||
|
@@:
|
||||||
|
rol eax, 4
|
||||||
|
test al, 0xF
|
||||||
|
loopz @b
|
||||||
|
jz .nohigh
|
||||||
|
inc ecx
|
||||||
|
@@:
|
||||||
|
push eax
|
||||||
|
and al, 0xF
|
||||||
|
cmp al, 10
|
||||||
|
sbb al, 69h
|
||||||
|
das
|
||||||
|
stosb
|
||||||
|
pop eax
|
||||||
|
rol eax, 4
|
||||||
|
loop @b
|
||||||
|
mov eax, [edx]
|
||||||
|
mov ecx, 8
|
||||||
|
jmp .low
|
||||||
|
.nohigh:
|
||||||
|
mov eax, [edx]
|
||||||
|
mov ecx, 8
|
||||||
|
@@:
|
||||||
|
rol eax, 4
|
||||||
|
test al, 0xF
|
||||||
|
loopz @b
|
||||||
|
inc ecx
|
||||||
|
.low:
|
||||||
|
push eax
|
||||||
|
and al, 0xF
|
||||||
|
cmp al, 10
|
||||||
|
sbb al, 69h
|
||||||
|
das
|
||||||
|
stosb
|
||||||
|
pop eax
|
||||||
|
rol eax, 4
|
||||||
|
loop .low
|
||||||
|
|
||||||
|
mov al, ' '
|
||||||
|
stosb
|
||||||
|
|
||||||
|
mov esi,[edx+24]
|
||||||
|
movzx ecx,byte [esi-1]
|
||||||
|
rep movsb
|
||||||
|
|
||||||
|
mov ax,0A0Dh
|
||||||
|
stosw
|
||||||
|
|
||||||
|
jmp symb_dump
|
||||||
|
|
||||||
|
symbols_dumped:
|
||||||
|
mov edx,dbgfilename
|
||||||
|
push esi edi
|
||||||
|
mov esi, outfile
|
||||||
|
mov edi, edx
|
||||||
|
@@:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test al, al
|
||||||
|
jnz @b
|
||||||
|
lea ecx, [edi-1]
|
||||||
|
@@:
|
||||||
|
dec edi
|
||||||
|
cmp edi, edx
|
||||||
|
jb @f
|
||||||
|
cmp byte [edi], '/'
|
||||||
|
jz @f
|
||||||
|
cmp byte [edi], '.'
|
||||||
|
jnz @b
|
||||||
|
mov ecx, edi
|
||||||
|
@@:
|
||||||
|
mov dword [ecx], '.dbg'
|
||||||
|
mov byte [ecx+4], 0
|
||||||
|
pop edi esi
|
||||||
|
call create
|
||||||
|
mov edx,[esp]
|
||||||
|
mov ecx,edi
|
||||||
|
sub ecx,edx
|
||||||
|
call write
|
||||||
|
call close
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
get_environment_variable:
|
get_environment_variable:
|
||||||
mov ecx,[memory_end]
|
mov ecx,[memory_end]
|
||||||
sub ecx,edi
|
sub ecx,edi
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
; flat assembler core variables
|
; flat assembler core variables
|
||||||
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
; Copyright (c) 1999-2011, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
|
|
||||||
; Variables which have to be set up by interface:
|
; Variables which have to be set up by interface:
|
||||||
@ -86,44 +86,54 @@ image_base dd ?
|
|||||||
image_base_high dd ?
|
image_base_high dd ?
|
||||||
resource_data dd ?
|
resource_data dd ?
|
||||||
resource_size dd ?
|
resource_size dd ?
|
||||||
|
actual_fixups_size dd ?
|
||||||
|
reserved_fixups dd ?
|
||||||
|
reserved_fixups_size dd ?
|
||||||
|
last_fixup_base dd ?
|
||||||
parenthesis_stack dd ?
|
parenthesis_stack dd ?
|
||||||
blocks_stack dd ?
|
blocks_stack dd ?
|
||||||
parsed_lines dd ?
|
parsed_lines dd ?
|
||||||
logical_value_parentheses dd ?
|
logical_value_parentheses dd ?
|
||||||
file_extension dd ?
|
file_extension dd ?
|
||||||
|
|
||||||
labels_type db ?
|
|
||||||
code_type db ?
|
|
||||||
virtual_data db ?
|
|
||||||
|
|
||||||
operand_size db ?
|
operand_size db ?
|
||||||
size_override db ?
|
size_override db ?
|
||||||
operand_prefix db ?
|
operand_prefix db ?
|
||||||
rex_prefix db ?
|
|
||||||
opcode_prefix db ?
|
opcode_prefix db ?
|
||||||
|
rex_prefix db ?
|
||||||
|
vex_required db ?
|
||||||
|
vex_register db ?
|
||||||
|
immediate_size db ?
|
||||||
|
|
||||||
base_code db ?
|
base_code db ?
|
||||||
extended_code db ?
|
extended_code db ?
|
||||||
supplemental_code db ?
|
supplemental_code db ?
|
||||||
postbyte_register db ?
|
postbyte_register db ?
|
||||||
|
segment_register db ?
|
||||||
|
xop_opcode_map db ?
|
||||||
|
|
||||||
immediate_size db ?
|
|
||||||
mmx_size db ?
|
mmx_size db ?
|
||||||
jump_type db ?
|
jump_type db ?
|
||||||
push_size db ?
|
push_size db ?
|
||||||
value_size db ?
|
value_size db ?
|
||||||
address_size db ?
|
address_size db ?
|
||||||
size_declared db ?
|
size_declared db ?
|
||||||
|
|
||||||
value_undefined db ?
|
value_undefined db ?
|
||||||
value_type db ?
|
value_type db ?
|
||||||
|
fp_sign db ?
|
||||||
|
fp_format db ?
|
||||||
compare_type db ?
|
compare_type db ?
|
||||||
logical_value_wrapping db ?
|
logical_value_wrapping db ?
|
||||||
next_pass_needed db ?
|
next_pass_needed db ?
|
||||||
macro_status db ?
|
|
||||||
segment_register db ?
|
|
||||||
prefixed_instruction db ?
|
|
||||||
fp_sign db ?
|
|
||||||
fp_format db ?
|
|
||||||
output_format db ?
|
output_format db ?
|
||||||
|
labels_type db ?
|
||||||
|
code_type db ?
|
||||||
|
virtual_data db ?
|
||||||
|
|
||||||
|
macro_status db ?
|
||||||
|
prefixed_instruction db ?
|
||||||
|
formatter_symbols_allowed db ?
|
||||||
|
|
||||||
characters rb 100h
|
characters rb 100h
|
||||||
converted rb 100h
|
converted rb 100h
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
; flat assembler version 1.68
|
; flat assembler version 1.69
|
||||||
; Copyright (c) 1999-2009, Tomasz Grysztar.
|
; Copyright (c) 1999-2011, Tomasz Grysztar.
|
||||||
; All rights reserved.
|
; All rights reserved.
|
||||||
;
|
;
|
||||||
; This programs is free for commercial and non-commercial use as long as
|
; This programs is free for commercial and non-commercial use as long as
|
||||||
@ -33,7 +33,7 @@
|
|||||||
; cannot simply be copied and put under another distribution licence
|
; cannot simply be copied and put under another distribution licence
|
||||||
; (including the GNU Public Licence).
|
; (including the GNU Public Licence).
|
||||||
|
|
||||||
VERSION_STRING equ "1.69.11"
|
VERSION_STRING equ "1.69.34"
|
||||||
|
|
||||||
VERSION_MAJOR = 1
|
VERSION_MAJOR = 1
|
||||||
VERSION_MINOR = 69
|
VERSION_MINOR = 69
|
||||||
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user