Rev 205 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 205 | Rev 220 | ||
---|---|---|---|
Line 1826... | Line 1826... | ||
1826 | get_word_value: |
1826 | get_word_value: |
1827 | mov [value_size],2 |
1827 | mov [value_size],2 |
1828 | mov [size_override],-1 |
1828 | mov [size_override],-1 |
1829 | call calculate_expression |
1829 | call calculate_expression |
1830 | mov eax,[edi+16] |
1830 | cmp word [edi+8],0 |
1831 | mov [symbol_identifier],eax |
- | |
1832 | cmp word [edi+8],0 |
- | |
1833 | jne invalid_value |
1831 | jne invalid_value |
1834 | mov al,[edi+12] |
1832 | mov eax,[edi+16] |
- | 1833 | mov [symbol_identifier],eax |
|
- | 1834 | mov al,[edi+12] |
|
1835 | mov [value_type],al |
1835 | mov [value_type],al |
1836 | cmp al,2 |
1836 | cmp al,2 |
1837 | jb check_word_value |
1837 | jb check_word_value |
1838 | cmp [error_line],0 |
1838 | cmp [error_line],0 |
1839 | jne check_word_value |
1839 | jne check_word_value |
Line 1857... | Line 1857... | ||
1857 | get_dword_value: |
1857 | get_dword_value: |
1858 | mov [value_size],4 |
1858 | mov [value_size],4 |
1859 | mov [size_override],-1 |
1859 | mov [size_override],-1 |
1860 | call calculate_expression |
1860 | call calculate_expression |
1861 | mov eax,[edi+16] |
1861 | cmp word [edi+8],0 |
1862 | mov [symbol_identifier],eax |
- | |
1863 | cmp word [edi+8],0 |
- | |
1864 | jne invalid_value |
1862 | jne invalid_value |
1865 | mov al,[edi+12] |
1863 | mov eax,[edi+16] |
- | 1864 | mov [symbol_identifier],eax |
|
- | 1865 | mov al,[edi+12] |
|
1866 | mov [value_type],al |
1866 | mov [value_type],al |
1867 | cmp al,4 |
1867 | cmp al,4 |
1868 | jne check_dword_value |
1868 | jne check_dword_value |
1869 | mov [value_type],2 |
1869 | mov [value_type],2 |
1870 | mov eax,[edi] |
1870 | mov eax,[edi] |
Line 1911... | Line 1911... | ||
1911 | get_qword_value: |
1911 | get_qword_value: |
1912 | mov [value_size],8 |
1912 | mov [value_size],8 |
1913 | mov [size_override],-1 |
1913 | mov [size_override],-1 |
1914 | call calculate_expression |
1914 | call calculate_expression |
1915 | mov eax,[edi+16] |
1915 | cmp word [edi+8],0 |
1916 | mov [symbol_identifier],eax |
- | |
1917 | cmp word [edi+8],0 |
- | |
1918 | jne invalid_value |
1916 | jne invalid_value |
1919 | mov al,[edi+12] |
1917 | mov eax,[edi+16] |
- | 1918 | mov [symbol_identifier],eax |
|
- | 1919 | mov al,[edi+12] |
|
1920 | mov [value_type],al |
1920 | mov [value_type],al |
1921 | check_qword_value: |
1921 | check_qword_value: |
1922 | mov eax,[edi] |
1922 | mov eax,[edi] |
1923 | mov edx,[edi+4] |
1923 | mov edx,[edi+4] |
1924 | ret |
1924 | ret |
Line 1961... | Line 1961... | ||
1961 | call get_byte_value |
1961 | call get_byte_value |
1962 | xor edx,edx |
1962 | xor edx,edx |
1963 | movzx eax,al |
1963 | movzx eax,al |
1964 | ret |
1964 | ret |
1965 | get_address_value: |
1965 | get_address_word_value: |
- | 1966 | mov [address_size],2 |
|
- | 1967 | mov [value_size],2 |
|
- | 1968 | jmp calculate_address |
|
- | 1969 | get_address_dword_value: |
|
- | 1970 | mov [address_size],4 |
|
- | 1971 | mov [value_size],4 |
|
- | 1972 | jmp calculate_address |
|
- | 1973 | get_address_qword_value: |
|
- | 1974 | mov [address_size],8 |
|
- | 1975 | mov [value_size],8 |
|
- | 1976 | jmp calculate_address |
|
- | 1977 | get_address_value: |
|
1966 | mov [address_size],0 |
1978 | mov [address_size],0 |
1967 | mov [value_size],8 |
1979 | mov [value_size],8 |
1968 | calculate_address: |
1980 | calculate_address: |
1969 | cmp byte [esi],'.' |
1981 | cmp byte [esi],'.' |
1970 | je invalid_address |
1982 | je invalid_address |
Line 2091... | Line 2103... | ||
2091 | cmp cl,9 |
2103 | cmp cl,9 |
2092 | je special_index_scale |
2104 | je special_index_scale |
2093 | check_index_scale: |
2105 | check_index_scale: |
2094 | or cl,cl |
2106 | or cl,cl |
2095 | jz address_registers_ok |
2107 | jz check_immediate_address |
2096 | cmp cl,1 |
2108 | cmp cl,1 |
2097 | je address_registers_ok |
2109 | je check_immediate_address |
2098 | cmp cl,2 |
2110 | cmp cl,2 |
2099 | je address_registers_ok |
2111 | je check_immediate_address |
2100 | cmp cl,4 |
2112 | cmp cl,4 |
2101 | je address_registers_ok |
2113 | je check_immediate_address |
2102 | cmp cl,8 |
2114 | cmp cl,8 |
2103 | je address_registers_ok |
2115 | je check_immediate_address |
2104 | jmp invalid_address |
2116 | jmp invalid_address |
2105 | special_index_scale: |
2117 | special_index_scale: |
2106 | mov bh,bl |
2118 | mov bh,bl |
2107 | dec cl |
2119 | dec cl |
2108 | address_registers_ok: |
2120 | check_immediate_address: |
2109 | jmp check_dword_value |
- | |
2110 | check_immediate_address: |
- | |
2111 | cmp [code_type],64 |
2121 | mov al,[address_size] |
- | 2122 | and al,0Fh |
|
- | 2123 | cmp al,2 |
|
- | 2124 | je check_word_value |
|
- | 2125 | cmp al,4 |
|
- | 2126 | je check_dword_value |
|
- | 2127 | cmp al,8 |
|
- | 2128 | je check_qword_value |
|
- | 2129 | or al,al |
|
- | 2130 | jnz invalid_value |
|
- | 2131 | cmp [code_type],64 |
|
2112 | jne check_dword_value |
2132 | jne check_dword_value |
2113 | cmp [address_size],4 |
2133 | jmp check_qword_value |
2114 | je check_dword_value |
- | |
2115 | jmp check_qword_value |
- | |
2116 | calculate_relative_offset: |
2134 | calculate_relative_offset: |
2117 | cmp [value_undefined],0 |
2135 | cmp [value_undefined],0 |
2118 | jne relative_offset_ok |
2136 | jne relative_offset_ok |
2119 | add eax,dword [org_origin] |
2137 | add eax,dword [org_origin] |
2120 | adc edx,dword [org_origin+4] |
2138 | adc edx,dword [org_origin+4] |
Line 2129... | Line 2147... | ||
2129 | je plt_relative_offset |
2147 | je plt_relative_offset |
2130 | cmp bl,[labels_type] |
2148 | cmp bl,[labels_type] |
2131 | jne invalid_use_of_symbol |
2149 | jne invalid_use_of_symbol |
2132 | mov [value_type],0 |
2150 | mov [value_type],0 |
2133 | mov ecx,[symbol_identifier] |
2151 | mov ecx,[address_symbol] |
- | 2152 | mov [symbol_identifier],ecx |
|
2134 | cmp ecx,[org_symbol] |
2153 | cmp ecx,[org_symbol] |
2135 | je relative_offset_ok |
2154 | je relative_offset_ok |
2136 | mov [value_type],3 |
2155 | mov [value_type],3 |
2137 | relative_offset_ok: |
2156 | relative_offset_ok: |
2138 | ret |
2157 | ret |
2139 | plt_relative_offset: |
2158 | plt_relative_offset: |