📄 lde.asm
字号:
xor eax, eax
cld
repeat_prefix:
lodsb
mov ebx, dword ptr [edx+eax]
test ebx, C_ANYPREFIX
jz end_prefix
;; twice LOCK,SEG,REP,66,67
test ebx, flag
jnz FailedExit
mov ecx, flag
or ecx, ebx
mov flag, ecx
test ebx, C_67
jz disasm_Tmp0
mov cl, 2
xor cl, 4
xor byte ptr [edi].disasm_defaddr, cl
jmp continue_prefix
disasm_Tmp0:
test ebx, C_66
jz disasm_Tmp1
mov cl, 2
xor cl, 4
xor byte ptr [edi].disasm_defdata, cl
jmp continue_prefix
disasm_Tmp1:
test ebx, C_SEG
jz disasm_Tmp2
mov byte ptr [edi].disasm_seg, al
jmp continue_prefix
disasm_Tmp2:
test ebx, C_REP
jz disasm_Tmp3
mov byte ptr [edi].disasm_rep, al
jmp continue_prefix
disasm_Tmp3:
;; LOCK
continue_prefix:
jmp repeat_prefix
end_prefix:
;; start handle flag
mov ecx, flag
or ecx, ebx
mov flag, ecx
mov byte ptr [edi].disasm_opcode, al
cmp al, 0Fh
jnz disasm_Tmp4
lodsb
mov byte ptr [edi].disasm_opcode2, al
;; 2nd flagtable half
mov ecx, dword ptr [edx+eax+256]
or ecx, flag
mov flag, ecx
sub ecx, C_ERROR
jz FailedExit
jmp end_handle_flag
disasm_Tmp4:
cmp al, 0F7h
jnz disasm_Tmp5
mov ecx, opcode0
mov cl, byte ptr [ecx]
and cl, 038h
jnz end_handle_flag
mov ecx, flag
or ecx, C_DATA66
mov flag, ecx
disasm_Tmp5:
cmp al, 0F6h
jnz disasm_Tmp6
mov ecx, opcode0
mov cl, byte ptr [ecx]
and cl, 038h
jnz end_handle_flag
mov ecx, flag
or ecx, C_DATA1
mov flag, ecx
disasm_Tmp6:
cmp al, 0CDh
jnz end_handle_flag
lea ecx, opcode0
mov cl, byte ptr [ecx]
sub cl, 020h
jnz disasm_Tmp7
mov ecx, flag
or ecx, C_DATA4
mov flag, ecx
jmp end_handle_flag
disasm_Tmp7:
mov ecx, flag
or ecx, C_DATA1
mov flag, ecx
end_handle_flag:
;; start handle mod and rm
mov ecx, flag
test ecx, C_MODRM
jz end_handle_mod_rm
lodsb
mov byte ptr [edi].disasm_modrm, al
mov cl, 038h
and cl, al
sub cl, 020h
jnz disasm_Tmp8
mov cl, byte ptr [edi].disasm_opcode
sub cl, 0FFh
jnz disasm_Tmp8
mov ecx, flag
or ecx, C_STOP
mov flag, ecx
disasm_Tmp8:
mov mod_i, al
and mod_i, 0C0h
mov rm_i, al
and rm_i, 07h
mov cl, mod_i
sub cl, 0C0h
jz end_handle_mod_rm
mov cl, byte ptr [edi].disasm_defaddr
sub cl, 04h
jnz disasm_Tmp9
mov cl, rm_i
sub cl, 04h
jnz disasm_Tmp10
mov ecx, flag
or ecx, C_SIB
mov flag, ecx
lodsb
mov byte ptr [edi].disasm_sib, al
mov cl, al
and cl, 07h
mov rm_i, cl
disasm_Tmp10:
mov cl, mod_i
sub cl, 040h
jnz disasm_Tmp11
mov ecx, flag
or ecx, C_ADDR1
mov flag, ecx
jmp end_handle_mod_rm
disasm_Tmp11:
mov cl, mod_i
sub cl, 080h
jnz disasm_Tmp12
mov ecx, flag
or ecx, C_ADDR4
mov flag, ecx
jmp end_handle_mod_rm
disasm_Tmp12:
mov cl, rm_i
sub cl, 05h
jnz end_handle_mod_rm
mov ecx, flag
or ecx, C_ADDR4
mov flag, ecx
jmp end_handle_mod_rm
;; else
disasm_Tmp9:
mov cl, mod_i
sub cl, 040h
jnz disasm_Tmp13
mov ecx, flag
or ecx, C_ADDR1
mov flag, ecx
jmp end_handle_mod_rm
disasm_Tmp13:
mov cl, mod_i
sub cl, 080h
jnz disasm_Tmp14
mov ecx, flag
or ecx, C_ADDR2
mov flag, ecx
jmp end_handle_mod_rm
disasm_Tmp14:
mov cl, rm_i
sub cl, 06h
jnz end_handle_mod_rm
mov ecx, flag
or ecx, C_ADDR2
mov flag, ecx
end_handle_mod_rm:
mov ecx, flag
mov dword ptr [edi].disasm_flag, ecx
;; eax -> a
;; edx -> d
;; ecx -> tmp
;; ebx -> tmp
mov ecx, flag
mov ebx, C_ADDR1
or ebx, C_ADDR2
or ebx, C_ADDR4
and ecx, ebx
mov eax, ecx
mov ecx, flag
mov ebx, C_DATA1
or ebx, C_DATA2
or ebx, C_DATA4
and ecx, ebx
shr ecx, 08h
mov edx, ebx
mov ecx, flag
test ecx, C_ADDR67
jz disasm_Tmp15
mov cl, byte ptr [edi].disasm_defaddr
movzx ecx, cl
add eax, ecx
disasm_Tmp15:
mov ecx, flag
test ecx, C_DATA66
jz disasm_Tmp16
mov cl, byte ptr [edi].disasm_defdata
movzx ecx, cl
add edx, ecx
disasm_Tmp16:
mov dword ptr [edi].disasm_addrsize, eax
mov dword ptr [edi].disasm_datasize, edx
xor ecx, ecx
mov ebx, eax
lea edx, [edi].disasm_addr_b
disasm_Tmp17:
cmp ecx, ebx
jz disasm_Tmp18
lodsb
mov byte ptr [edx+ecx], al
inc ecx
jmp disasm_Tmp17
disasm_Tmp18:
xor ecx, ecx
mov ebx, eax
lea edx, [edi].disasm_addr_b
disasm_Tmp19:
cmp ecx, ebx
jz disasm_Tmp20
lodsb
mov byte ptr [edx+ecx], al
inc ecx
jmp disasm_Tmp19
disasm_Tmp20:
sub esi, opcode0
mov dword ptr [edi].disasm_len, esi
mov eax, dword ptr [edi].disasm_len
Exit_disasm:
ret
FailedExit:
xor eax, eax
jmp Exit_disasm
disasm endp
end Start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -