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 3113... | Line 3113... | ||
3113 | je jmp_imm_64bit |
3113 | je jmp_imm_64bit |
3114 | jmp_imm_32bit: |
3114 | jmp_imm_32bit: |
3115 | cmp [code_type],64 |
3115 | cmp [code_type],64 |
3116 | je invalid_operand_size |
3116 | je invalid_operand_size |
3117 | call get_dword_value |
3117 | call get_address_dword_value |
3118 | cmp [code_type],16 |
3118 | cmp [code_type],16 |
3119 | jne jmp_imm_32bit_prefix_ok |
3119 | jne jmp_imm_32bit_prefix_ok |
3120 | mov byte [edi],66h |
3120 | mov byte [edi],66h |
3121 | inc edi |
3121 | inc edi |
3122 | jmp_imm_32bit_prefix_ok: |
3122 | jmp_imm_32bit_prefix_ok: |
3123 | call calculate_jump_offset |
3123 | call calculate_jump_offset |
Line 3135... | Line 3135... | ||
3135 | jmp instruction_assembled |
3135 | jmp instruction_assembled |
3136 | jmp_imm_64bit: |
3136 | jmp_imm_64bit: |
3137 | cmp [code_type],64 |
3137 | cmp [code_type],64 |
3138 | jne invalid_operand_size |
3138 | jne invalid_operand_size |
3139 | call get_qword_value |
3139 | call get_address_qword_value |
3140 | call calculate_jump_offset |
3140 | call calculate_jump_offset |
3141 | mov ecx,edx |
3141 | mov ecx,edx |
3142 | cdq |
3142 | cdq |
3143 | cmp edx,ecx |
3143 | cmp edx,ecx |
3144 | jne value_out_of_range |
3144 | jne value_out_of_range |
3145 | call check_for_short_jump |
3145 | call check_for_short_jump |
Line 3149... | Line 3149... | ||
3149 | mov al,0EBh |
3149 | mov al,0EBh |
3150 | stos word [edi] |
3150 | stos word [edi] |
3151 | jmp instruction_assembled |
3151 | jmp instruction_assembled |
3152 | jmp_imm_16bit: |
3152 | jmp_imm_16bit: |
3153 | call get_word_value |
3153 | call get_address_word_value |
3154 | cmp [code_type],16 |
3154 | cmp [code_type],16 |
3155 | je jmp_imm_16bit_prefix_ok |
3155 | je jmp_imm_16bit_prefix_ok |
3156 | mov byte [edi],66h |
3156 | mov byte [edi],66h |
3157 | inc edi |
3157 | inc edi |
3158 | jmp_imm_16bit_prefix_ok: |
3158 | jmp_imm_16bit_prefix_ok: |
3159 | call calculate_jump_offset |
3159 | call calculate_jump_offset |
Line 3288... | Line 3288... | ||
3288 | je conditional_jump_64bit |
3288 | je conditional_jump_64bit |
3289 | conditional_jump_32bit: |
3289 | conditional_jump_32bit: |
3290 | cmp [code_type],64 |
3290 | cmp [code_type],64 |
3291 | je invalid_operand_size |
3291 | je invalid_operand_size |
3292 | call get_dword_value |
3292 | call get_address_dword_value |
3293 | cmp [code_type],16 |
3293 | cmp [code_type],16 |
3294 | jne conditional_jump_32bit_prefix_ok |
3294 | jne conditional_jump_32bit_prefix_ok |
3295 | mov byte [edi],66h |
3295 | mov byte [edi],66h |
3296 | inc edi |
3296 | inc edi |
3297 | conditional_jump_32bit_prefix_ok: |
3297 | conditional_jump_32bit_prefix_ok: |
3298 | call calculate_jump_offset |
3298 | call calculate_jump_offset |
Line 3312... | Line 3312... | ||
3312 | jmp instruction_assembled |
3312 | jmp instruction_assembled |
3313 | conditional_jump_64bit: |
3313 | conditional_jump_64bit: |
3314 | cmp [code_type],64 |
3314 | cmp [code_type],64 |
3315 | jne invalid_operand_size |
3315 | jne invalid_operand_size |
3316 | call get_qword_value |
3316 | call get_address_qword_value |
3317 | call calculate_jump_offset |
3317 | call calculate_jump_offset |
3318 | mov ecx,edx |
3318 | mov ecx,edx |
3319 | cdq |
3319 | cdq |
3320 | cmp edx,ecx |
3320 | cmp edx,ecx |
3321 | jne value_out_of_range |
3321 | jne value_out_of_range |
3322 | call check_for_short_jump |
3322 | call check_for_short_jump |
Line 3326... | Line 3326... | ||
3326 | mov al,[base_code] |
3326 | mov al,[base_code] |
3327 | stos word [edi] |
3327 | stos word [edi] |
3328 | jmp instruction_assembled |
3328 | jmp instruction_assembled |
3329 | conditional_jump_16bit: |
3329 | conditional_jump_16bit: |
3330 | call get_word_value |
3330 | call get_address_word_value |
3331 | cmp [code_type],16 |
3331 | cmp [code_type],16 |
3332 | je conditional_jump_16bit_prefix_ok |
3332 | je conditional_jump_16bit_prefix_ok |
3333 | mov byte [edi],66h |
3333 | mov byte [edi],66h |
3334 | inc edi |
3334 | inc edi |
3335 | conditional_jump_16bit_prefix_ok: |
3335 | conditional_jump_16bit_prefix_ok: |
3336 | call calculate_jump_offset |
3336 | call calculate_jump_offset |
Line 3390... | Line 3390... | ||
3390 | je loop_jump_64bit |
3390 | je loop_jump_64bit |
3391 | loop_jump_32bit: |
3391 | loop_jump_32bit: |
3392 | cmp [code_type],64 |
3392 | cmp [code_type],64 |
3393 | je invalid_operand_size |
3393 | je invalid_operand_size |
3394 | call get_dword_value |
3394 | call get_address_dword_value |
3395 | cmp [code_type],16 |
3395 | cmp [code_type],16 |
3396 | jne loop_jump_32bit_prefix_ok |
3396 | jne loop_jump_32bit_prefix_ok |
3397 | mov byte [edi],66h |
3397 | mov byte [edi],66h |
3398 | inc edi |
3398 | inc edi |
3399 | loop_jump_32bit_prefix_ok: |
3399 | loop_jump_32bit_prefix_ok: |
3400 | call calculate_jump_offset |
3400 | call calculate_jump_offset |
Line 3405... | Line 3405... | ||
3405 | jmp jump_out_of_range |
3405 | jmp jump_out_of_range |
3406 | loop_jump_64bit: |
3406 | loop_jump_64bit: |
3407 | cmp [code_type],64 |
3407 | cmp [code_type],64 |
3408 | jne invalid_operand_size |
3408 | jne invalid_operand_size |
3409 | call get_qword_value |
3409 | call get_address_qword_value |
3410 | call calculate_jump_offset |
3410 | call calculate_jump_offset |
3411 | mov ecx,edx |
3411 | mov ecx,edx |
3412 | cdq |
3412 | cdq |
3413 | cmp edx,ecx |
3413 | cmp edx,ecx |
3414 | jne value_out_of_range |
3414 | jne value_out_of_range |
3415 | jmp make_loop_jump |
3415 | jmp make_loop_jump |
3416 | loop_jump_16bit: |
3416 | loop_jump_16bit: |
3417 | call get_word_value |
3417 | call get_address_word_value |
3418 | cmp [code_type],16 |
3418 | cmp [code_type],16 |
3419 | je loop_jump_16bit_prefix_ok |
3419 | je loop_jump_16bit_prefix_ok |
3420 | mov byte [edi],66h |
3420 | mov byte [edi],66h |
3421 | inc edi |
3421 | inc edi |
3422 | loop_jump_16bit_prefix_ok: |
3422 | loop_jump_16bit_prefix_ok: |
3423 | call calculate_jump_offset |
3423 | call calculate_jump_offset |
Line 6018... | Line 6018... | ||
6018 | mov [address_high],edx |
6018 | mov [address_high],edx |
6019 | cdq |
6019 | cdq |
6020 | cmp edx,[address_high] |
6020 | cmp edx,[address_high] |
6021 | jne value_out_of_range |
6021 | jne value_out_of_range |
6022 | mov edx,[symbol_identifier] |
6022 | mov edx,eax |
6023 | mov [address_symbol],edx |
- | |
6024 | mov edx,eax |
- | |
6025 | ror ecx,16 |
6023 | ror ecx,16 |
6026 | mov cl,[value_type] |
6024 | mov cl,[value_type] |
6027 | rol ecx,16 |
6025 | rol ecx,16 |
6028 | mov bx,0FF00h |
6026 | mov bx,0FF00h |
6029 | address_ok: |
6027 | address_ok: |