Rev 157 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 157 | Rev 174 | ||
---|---|---|---|
Line 839... | Line 839... | ||
839 | mov ebx,edi |
839 | mov ebx,edi |
840 | sub ebx,14h |
840 | sub ebx,14h |
841 | cmp al,0E0h |
841 | cmp al,0E0h |
842 | je calculate_rva |
842 | je calculate_rva |
843 | cmp al,0D0h |
843 | cmp al,0E1h |
- | 844 | je calculate_plt |
|
- | 845 | cmp al,0D0h |
|
844 | je calculate_not |
846 | je calculate_not |
845 | cmp al,083h |
847 | cmp al,083h |
846 | je calculate_neg |
848 | je calculate_neg |
847 | mov dx,[ebx+8] |
849 | mov dx,[ebx+8] |
848 | or dx,[edi+8] |
850 | or dx,[edi+8] |
Line 1143... | Line 1145... | ||
1143 | jne invalid_sub |
1145 | jne invalid_sub |
1144 | xor ah,ah |
1146 | xor ah,ah |
1145 | mov ecx,[edi+16] |
1147 | mov ecx,[edi+16] |
1146 | cmp ecx,[ebx+16] |
1148 | cmp ecx,[ebx+16] |
1147 | je sub_values |
1149 | jne invalid_sub |
1148 | cmp ecx,[org_symbol] |
- | |
1149 | jne invalid_sub |
- | |
1150 | test byte [ebx+12],1 |
1150 | sub_values: |
1151 | jnz invalid_sub |
- | |
1152 | mov ah,3 |
- | |
1153 | sub_values: |
- | |
1154 | mov [ebx+12],ah |
1151 | mov [ebx+12],ah |
1155 | mov eax,[edi] |
1152 | mov eax,[edi] |
1156 | sub [ebx],eax |
1153 | sub [ebx],eax |
1157 | mov eax,[edi+4] |
1154 | mov eax,[edi+4] |
1158 | sbb [ebx+4],eax |
1155 | sbb [ebx+4],eax |
Line 1554... | Line 1551... | ||
1554 | jmp calculation_loop |
1551 | jmp calculation_loop |
1555 | calculate_gotoff: |
1552 | calculate_gotoff: |
1556 | test [format_flags],8+1 |
1553 | test [format_flags],8+1 |
1557 | jnz invalid_expression |
1554 | jnz invalid_expression |
1558 | cmp byte [edi+12],2 |
1555 | mov dl,5 |
- | 1556 | cmp byte [edi+12],2 |
|
1559 | je gotoff_ok |
1557 | je change_value_type |
1560 | cmp [error_line],0 |
1558 | incorrect_change_of_value_type: |
- | 1559 | cmp [error_line],0 |
|
1561 | jne pe64_rva_ok |
1560 | jne change_value_type |
1562 | mov eax,[current_line] |
1561 | mov eax,[current_line] |
1563 | mov [error_line],eax |
1562 | mov [error_line],eax |
1564 | mov [error],invalid_use_of_symbol |
1563 | mov [error],invalid_use_of_symbol |
1565 | gotoff_ok: |
1564 | change_value_type: |
1566 | mov byte [edi+12],5 |
1565 | mov byte [edi+12],dl |
1567 | add edi,14h |
1566 | add edi,14h |
1568 | jmp calculation_loop |
1567 | jmp calculation_loop |
1569 | div_64: |
1568 | calculate_plt: |
- | 1569 | cmp word [edi+8],0 |
|
- | 1570 | jne invalid_expression |
|
- | 1571 | cmp [output_format],5 |
|
- | 1572 | jne invalid_expression |
|
- | 1573 | test [format_flags],1 |
|
- | 1574 | jnz invalid_expression |
|
- | 1575 | mov dl,6 |
|
- | 1576 | mov dh,2 |
|
- | 1577 | test [format_flags],8 |
|
- | 1578 | jz check_value_for_plt |
|
- | 1579 | mov dh,4 |
|
- | 1580 | check_value_for_plt: |
|
- | 1581 | mov eax,[edi] |
|
- | 1582 | or eax,[edi+4] |
|
- | 1583 | jnz incorrect_change_of_value_type |
|
- | 1584 | cmp byte [edi+12],dh |
|
- | 1585 | jne incorrect_change_of_value_type |
|
- | 1586 | mov eax,[edi+16] |
|
- | 1587 | cmp byte [eax],81h |
|
- | 1588 | jne incorrect_change_of_value_type |
|
- | 1589 | jmp change_value_type |
|
- | 1590 | div_64: |
|
1570 | xor ebx,ebx |
1591 | xor ebx,ebx |
1571 | cmp dword [edi],0 |
1592 | cmp dword [edi],0 |
1572 | jne divider_ok |
1593 | jne divider_ok |
1573 | cmp dword [edi+4],0 |
1594 | cmp dword [edi+4],0 |
1574 | jne divider_ok |
1595 | jne divider_ok |
Line 1953... | Line 1974... | ||
1953 | mov al,[edi+12] |
1974 | mov al,[edi+12] |
1954 | mov [value_type],al |
1975 | mov [value_type],al |
1955 | cmp al,5 |
1976 | cmp al,5 |
1956 | je gotoff_address |
1977 | je gotoff_address |
1957 | test al,1 |
1978 | ja invalid_use_of_symbol |
- | 1979 | test al,1 |
|
1958 | jnz invalid_use_of_symbol |
1980 | jnz invalid_use_of_symbol |
1959 | or al,al |
1981 | or al,al |
1960 | jz address_size_ok |
1982 | jz address_size_ok |
1961 | shl al,5 |
1983 | shl al,5 |
1962 | jmp address_symbol_ok |
1984 | jmp address_symbol_ok |
Line 1982... | Line 2004... | ||
1982 | mov ecx,[current_line] |
2004 | mov ecx,[current_line] |
1983 | mov [error_line],ecx |
2005 | mov [error_line],ecx |
1984 | mov [error],value_out_of_range |
2006 | mov [error],value_out_of_range |
1985 | address_size_ok: |
2007 | address_size_ok: |
1986 | xor bx,bx |
2008 | xor ebx,ebx |
1987 | xor cl,cl |
2009 | xor ecx,ecx |
1988 | mov ch,[address_size] |
2010 | mov cl,[value_type] |
- | 2011 | shl ecx,16 |
|
- | 2012 | mov ch,[address_size] |
|
1989 | cmp word [edi+8],0 |
2013 | cmp word [edi+8],0 |
1990 | je check_immediate_address |
2014 | je check_immediate_address |
1991 | mov al,[edi+8] |
2015 | mov al,[edi+8] |
1992 | mov dl,[edi+10] |
2016 | mov dl,[edi+10] |
1993 | call get_address_register |
2017 | call get_address_register |
Line 2069... | Line 2093... | ||
2069 | jne check_dword_value |
2093 | jne check_dword_value |
2070 | cmp [address_size],4 |
2094 | cmp [address_size],4 |
2071 | je check_dword_value |
2095 | je check_dword_value |
2072 | jmp check_qword_value |
2096 | jmp check_qword_value |
2073 | get_relative_offset: |
2097 | calculate_relative_offset: |
2074 | mov [value_size],4 |
- | |
2075 | mov [size_override],-1 |
- | |
2076 | call calculate_expression |
- | |
2077 | calculate_relative_offset: |
- | |
2078 | push esi |
2098 | cmp [value_undefined],0 |
2079 | add edi,14h |
2099 | jne relative_offset_ok |
2080 | mov esi,[display_buffer] |
2100 | add eax,dword [org_origin] |
2081 | sub esi,7 |
2101 | adc edx,dword [org_origin+4] |
2082 | lea eax,[esi-14h] |
- | |
2083 | cmp eax,edi |
2102 | sub eax,edi |
2084 | jb out_of_memory |
2103 | sbb edx,0 |
2085 | mov byte [esi],11h |
2104 | mov bl,[value_type] |
2086 | xor eax,eax |
2105 | or bl,bl |
2087 | mov dword [esi+1],eax |
2106 | je relative_offset_ok |
2088 | mov word [esi+5],')' shl 8 + 81h |
2107 | test bl,1 |
2089 | call calculation_loop |
2108 | jnz invalid_use_of_symbol |
2090 | pop esi |
2109 | cmp bl,6 |
2091 | cmp word [edi+8],0 |
2110 | je plt_relative_offset |
2092 | jne invalid_value |
2111 | cmp bl,[labels_type] |
2093 | mov al,[edi+12] |
2112 | jne invalid_use_of_symbol |
2094 | mov [value_type],al |
2113 | mov [value_type],0 |
2095 | mov eax,[edi+16] |
2114 | mov ecx,[symbol_identifier] |
2096 | mov [symbol_identifier],eax |
- | |
2097 | mov eax,[edi] |
2115 | cmp ecx,[org_symbol] |
2098 | mov edx,[edi+4] |
- | |
2099 | or edx,edx |
2116 | je relative_offset_ok |
2100 | jz offset_positive |
- | |
2101 | cmp edx,-1 |
2117 | mov [value_type],3 |
2102 | jne range_exceeded |
- | |
2103 | bt eax,31 |
2118 | relative_offset_ok: |
2104 | jnc range_exceeded |
- | |
2105 | ret |
2119 | ret |
2106 | offset_positive: |
2120 | plt_relative_offset: |
2107 | bt eax,31 |
2121 | mov [value_type],7 |
2108 | jc range_exceeded |
- | |
2109 | ret |
2122 | ret |
2110 | 2123 | ||
Line 2111... | Line 2124... | ||
2111 | preevaluate_logical_expression: |
2124 | preevaluate_logical_expression: |
2112 | push edi |
2125 | push edi |
2113 | call preevaluate_logical_value |
2126 | call preevaluate_logical_value |