Rev 707 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 707 | Rev 872 | ||
---|---|---|---|
Line 3353... | Line 3353... | ||
3353 | jmp instruction_assembled |
3353 | jmp instruction_assembled |
3354 | loop_instruction_16bit: |
3354 | loop_instruction_16bit: |
3355 | cmp [code_type],64 |
3355 | cmp [code_type],64 |
3356 | je illegal_instruction |
3356 | je illegal_instruction |
3357 | mov dl,al |
3357 | cmp [code_type],16 |
3358 | call address_16bit_prefix |
3358 | je loop_instruction |
3359 | mov al,dl |
3359 | mov [operand_prefix],67h |
3360 | jmp loop_instruction |
3360 | jmp loop_instruction |
3361 | loop_instruction_32bit: |
3361 | loop_instruction_32bit: |
3362 | mov dl,al |
3362 | cmp [code_type],32 |
3363 | call address_32bit_prefix |
3363 | je loop_instruction |
3364 | mov al,dl |
3364 | mov [operand_prefix],67h |
3365 | jmp loop_instruction |
3365 | jmp loop_instruction |
3366 | loop_instruction_64bit: |
3366 | loop_instruction_64bit: |
3367 | cmp [code_type],64 |
3367 | cmp [code_type],64 |
3368 | jne illegal_instruction |
3368 | jne illegal_instruction |
3369 | loop_instruction: |
3369 | loop_instruction: |
3370 | mov [base_code],al |
3370 | mov [base_code],al |
Line 3398... | Line 3398... | ||
3398 | jne loop_jump_32bit_prefix_ok |
3398 | jne loop_jump_32bit_prefix_ok |
3399 | mov byte [edi],66h |
3399 | mov byte [edi],66h |
3400 | inc edi |
3400 | inc edi |
3401 | loop_jump_32bit_prefix_ok: |
3401 | loop_jump_32bit_prefix_ok: |
3402 | call calculate_jump_offset |
3402 | call loop_counter_size |
- | 3403 | call calculate_jump_offset |
|
3403 | cdq |
3404 | cdq |
3404 | make_loop_jump: |
3405 | make_loop_jump: |
3405 | call check_for_short_jump |
3406 | call check_for_short_jump |
3406 | jc conditional_jump_short |
3407 | jc conditional_jump_short |
3407 | jmp jump_out_of_range |
3408 | jmp jump_out_of_range |
3408 | loop_jump_64bit: |
3409 | loop_counter_size: |
- | 3410 | cmp [operand_prefix],0 |
|
- | 3411 | je loop_counter_size_ok |
|
- | 3412 | push eax |
|
- | 3413 | mov al,[operand_prefix] |
|
- | 3414 | stos byte [edi] |
|
- | 3415 | pop eax |
|
- | 3416 | loop_counter_size_ok: |
|
- | 3417 | ret |
|
- | 3418 | loop_jump_64bit: |
|
3409 | cmp [code_type],64 |
3419 | cmp [code_type],64 |
3410 | jne invalid_operand_size |
3420 | jne invalid_operand_size |
3411 | call get_address_qword_value |
3421 | call get_address_qword_value |
3412 | call calculate_jump_offset |
3422 | call calculate_jump_offset |
3413 | mov ecx,edx |
3423 | mov ecx,edx |
Line 3421... | Line 3431... | ||
3421 | je loop_jump_16bit_prefix_ok |
3431 | je loop_jump_16bit_prefix_ok |
3422 | mov byte [edi],66h |
3432 | mov byte [edi],66h |
3423 | inc edi |
3433 | inc edi |
3424 | loop_jump_16bit_prefix_ok: |
3434 | loop_jump_16bit_prefix_ok: |
3425 | call calculate_jump_offset |
3435 | call loop_counter_size |
- | 3436 | call calculate_jump_offset |
|
3426 | cwde |
3437 | cwde |
3427 | cdq |
3438 | cdq |
3428 | jmp make_loop_jump |
3439 | jmp make_loop_jump |
3429 | 3440 | ||
Line 4883... | Line 4894... | ||
4883 | call store_nomem_instruction |
4894 | call store_nomem_instruction |
4884 | jmp instruction_assembled |
4895 | jmp instruction_assembled |
4885 | movq_mmreg_mmreg: |
4896 | movq_mmreg_mmreg: |
4886 | call convert_mmx_register |
4897 | call convert_mmx_register |
4887 | mov bl,al |
4898 | cmp ah,[mmx_size] |
- | 4899 | jne invalid_operand_size |
|
- | 4900 | mov bl,al |
|
4888 | call store_nomem_instruction |
4901 | call store_nomem_instruction |
4889 | jmp instruction_assembled |
4902 | jmp instruction_assembled |
4890 | movdq_instruction: |
4903 | movdq_instruction: |
4891 | mov [operand_prefix],al |
4904 | mov [operand_prefix],al |
4892 | mov [base_code],0Fh |
4905 | mov [base_code],0Fh |
Line 5837... | Line 5850... | ||
5837 | jne invalid_operand |
5850 | jne invalid_operand |
5838 | lods byte [esi] |
5851 | lods byte [esi] |
5839 | call convert_register |
5852 | call convert_register |
5840 | mov [postbyte_register],al |
5853 | mov [postbyte_register],al |
5841 | cmp [operand_size],4 |
5854 | call vmread_check_size |
5842 | jne invalid_operand_size |
- | |
5843 | jmp vmx_size_ok |
5855 | jmp vmx_size_ok |
5844 | vmread_nomem: |
5856 | vmread_nomem: |
5845 | lods byte [esi] |
5857 | lods byte [esi] |
5846 | call convert_register |
5858 | call convert_register |
5847 | push eax |
5859 | push eax |
5848 | call vmread_check_size |
5860 | call vmread_check_size |
Line 5856... | Line 5868... | ||
5856 | jne invalid_operand |
5868 | jne invalid_operand |
5857 | lods byte [esi] |
5869 | lods byte [esi] |
5858 | call convert_register |
5870 | call convert_register |
5859 | mov [postbyte_register],al |
5871 | mov [postbyte_register],al |
5860 | cmp [operand_size],4 |
5872 | call vmread_check_size |
5861 | jne invalid_operand_size |
- | |
5862 | pop ebx |
5873 | pop ebx |
5863 | mov [base_code],0Fh |
5874 | mov [base_code],0Fh |
5864 | call store_nomem_instruction |
5875 | call store_nomem_instruction |
5865 | jmp instruction_assembled |
5876 | jmp instruction_assembled |
5866 | vmread_check_size: |
5877 | vmread_check_size: |
5867 | cmp [code_type],64 |
5878 | cmp [code_type],64 |
Line 5881... | Line 5892... | ||
5881 | jne invalid_operand |
5892 | jne invalid_operand |
5882 | lods byte [esi] |
5893 | lods byte [esi] |
5883 | call convert_register |
5894 | call convert_register |
5884 | mov [postbyte_register],al |
5895 | mov [postbyte_register],al |
5885 | cmp [operand_size],4 |
5896 | call vmread_check_size |
5886 | jne invalid_operand_size |
- | |
5887 | mov [operand_size],0 |
5897 | mov [operand_size],0 |
5888 | lods byte [esi] |
5898 | lods byte [esi] |
5889 | cmp al,',' |
5899 | cmp al,',' |
5890 | jne invalid_operand |
5900 | jne invalid_operand |
5891 | lods byte [esi] |
5901 | lods byte [esi] |
5892 | call get_size_operator |
5902 | call get_size_operator |
Line 6445... | Line 6455... | ||
6445 | jne store_address_32bit_value |
6455 | jne store_address_32bit_value |
6446 | mov eax,edx |
6456 | mov eax,edx |
6447 | cdq |
6457 | cdq |
6448 | cmp edx,[address_high] |
6458 | cmp edx,[address_high] |
6449 | jne value_out_of_range |
6459 | je address_32bit_value_ok |
- | 6460 | cmp [error_line],0 |
|
- | 6461 | jne address_32bit_value_ok |
|
- | 6462 | mov edx,[current_line] |
|
- | 6463 | mov [error_line],edx |
|
- | 6464 | mov [error],value_out_of_range |
|
6450 | mov edx,eax |
6465 | address_32bit_value_ok: |
- | 6466 | mov edx,eax |
|
6451 | jmp store_address_32bit_value |
6467 | jmp store_address_32bit_value |
6452 | sib_address_8bit_value: |
6468 | sib_address_8bit_value: |
6453 | or al,01000000b |
6469 | or al,01000000b |
6454 | mov cl,[postbyte_register] |
6470 | mov cl,[postbyte_register] |
6455 | shl cl,3 |
6471 | shl cl,3 |