📄 sdisassm.inc
字号:
call put_prefix
call put_open
cmp _adrsiz,0
jz @@l1
call put_textax
call makehexax
call put_adrmemb
jmp put_close
@@l1: call put_texteax
call makehexeax
call put_adrmemb
jmp put_close
_type_ObAL: ; offs16/32 , AL
call put_tab
call put_prefix
call put_open
cmp _adrsiz,0
jz @@l1
call put_textax
call makehexax
call put_adrmemb
jmp @@l2
@@l1: call put_texteax
call makehexeax
call put_adrmemb
@@l2: call put_close
call put_comma
mov edx,offs _regtab8
jmp put_string
_type_eAXOv:
call put_tab
cmp _opsiz,0
mov edx,offs _regtab16
jnz @@l0
mov edx,offs _regtab32
@@l0: call put_string
call put_comma
call put_prefix
call put_open
cmp _adrsiz,0
jz @@l1
call put_textax
call makehexax
call put_close
cmp _opsiz,0
jnz put_adrmemw
jmp put_adrmemd
@@l1: call put_texteax
call makehexeax
call put_close
cmp _opsiz,0
jnz put_adrmemw
jmp put_adrmemd
_type_OveAX:
call put_tab
call put_prefix
call put_open
cmp _adrsiz,0
jz @@l1
call put_textax
call makehexax
jmp @@l2
@@l1: call put_texteax
call makehexeax
@@l2: call put_close
call put_comma
cmp _opsiz,0
jz @@l0
call put_adrmemw
mov edx,offs _regtab16
jmp put_string
@@l0: call put_adrmemd
mov edx,offs _regtab32
jmp put_string
;----------------------------------
_type_Eb: ; ex:INC bptr [addr]
call put_tab
call put_textal
call decode_mode
mov ebp,offs _regtab8
mov edx,offs _text_bptr
cmp ah,03h
jz @@l2
call put_string
@@l2: call decode_by_mod
jmp put_memb
_type_Ew: ; ex:NEG wptr [addr]
call put_tab
call put_textal
call decode_mode
mov ebp,offs _regtab16
mov edx,offs _text_wptr
cmp ah,03h
jz @@l2
call put_string
@@l2: call decode_by_mod
jmp put_memw
_type_Ev: ; push 0000h / push 12345678h
call put_tab
type_Ev:call put_textal
call decode_mode
cmp _opsiz,0
mov ebp,offs _regtab16
mov edx,offs _text_wptr
jnz @@l1
mov ebp,offs _regtab32
mov edx,offs _text_dptr
@@l1: cmp ah,03h
jz @@l2
call put_string
@@l2: call decode_by_mod
cmp _opsiz,0
jnz put_memw
jmp put_memd
_type_Ib:
call put_tab ; INT 00h
type_Ib:call put_textal
call makehexal
jmp put_charh
_type_Iw:
call put_tab ; RET 0000h
type_Iw:call put_textax
call makehexax
jmp put_charh
_type_Iv:
call put_tab
type_Iv:cmp _opsiz,0
jz @@l1
call put_textax
call makehexax
jmp put_charh
@@l1: call put_texteax
call makehexdword
jmp put_charh
_type_IwIb:
call put_tab
call put_textax
call makehexax
call put_charh
call put_comma
call put_textal
call makehexal
jmp put_charh
;----------------------------------
_type_EwRw:
call put_tab
call put_textal
call decode_mode
mov ebp,offs _regtab16
call decode_by_mod
call put_memw
call put_comma
jmp decode_by_reg
;----------------------------------
_type_GvEvIb:
call _type_GvEv
call put_comma
jmp type_Ib
_type_GvEvIv:
call _type_GvEv
call put_comma
jmp type_Iv
_type_EvGvIb:
call _type_EvGv
call put_comma
jmp type_Ib
_type_EvGvIv:
call _type_EvGv
call put_comma
jmp type_Iv
_type_EvGvCL:
call _type_EvGv
call put_comma
mov edx,offs _regtab8+4
jmp put_string
_type_GvMp:
call put_tab
call put_textal
call decode_mode
cmp _opsiz,0
jz @@l1
mov ebp,offs _regtab16
call decode_by_reg
call put_comma
call decode_by_mod
jmp put_memfw
@@l1: mov ebp,offs _regtab32
call decode_by_reg
call put_comma
call decode_by_mod
jmp put_memfd
;----------------------------------
_type_movIb:
call put_tab
and eax,07h
lea edx,_regtab8[eax*4]
call put_string
call put_comma
call put_textal
call makehexal
jmp put_charh
_type_movIv:
call put_tab
and eax,07h
cmp _opsiz,0
jz @@l1
lea edx,_regtab16[eax*4]
call put_string
call put_comma
call put_textax
call makehexax
jmp put_charh
@@l1: lea edx,_regtab32[eax*4]
call put_string
call put_comma
call put_texteax
call makehexdword
jmp put_charh
_type_eAXr: ; eAX,reg16/32
call put_tab
and eax,7
cmp _opsiz,0
mov ebx,offs _regtab16
jnz @@l1
mov ebx,offs _regtab32
@@l1: lea edx,[ebx+eax*4]
call put_string
call put_comma
mov edx,ebx
jmp put_string
;----------------------------------
_type_Jb:
call put_tab
call put_textal
movsx eax,al
test eax,eax
jns @@0
neg _jump_taken
@@0: add eax,esi
cmp _adrsiz,0
jnz makehexax
jmp makehexeax
_type_Jv: ; relative addr calculation
call put_tab
cmp _adrsiz,0
jz @@l1
call put_textax
movsx eax,ax
test eax,eax
jns @@0
neg _jump_taken
@@0: add eax,esi
jmp makehexax
@@l1: call put_texteax
test eax,eax
jns @@1
neg _jump_taken
@@1: add eax,esi
jmp makehexeax
_type_loopne:
mov eax,5 ; check for JNZ
call check_jump
jmp _type_loop
_type_loope:
mov eax,4 ; check for JZ
call check_jump
jmp _type_loop
_type_loop:
cmp _opsiz,0 ; check for CX or ECX == 0
jnz @@1
mov eax,dptr _ecx
jmp @@2
@@1: movzx eax,wptr _ecx
@@2: dec eax
setnz al
or _jump_taken,al
jmp _type_Jb
_type_jumpJb:
mov _jump_taken,1
jmp _type_Jb
_type_jumpJv:
mov _jump_taken,1
jmp _type_Jv
_type_jumpAp:
mov _jump_taken,1
jmp _type_Ap
_type_jumpEv:
mov _jump_taken,1
jmp _type_Ev
;----------------------------------
_type_regv:
call put_tab
and eax,07h
cmp _opsiz,0
lea edx,_regtab16[eax*4]
jnz @@l1
lea edx,_regtab32[eax*4]
@@l1: jmp put_string
_type_setb:
and eax,0Fh
lea edx,_settab386[eax*8]
call put_string
jmp _type_Eb
_type_jumpb:
and eax,0Fh
lea edx,_jumptab86[eax*4]
call check_jump
call put_string
jmp _type_Jb
_type_jumpv:
and eax,0Fh
lea edx,_jumptab86[eax*4]
call check_jump
call put_string
jmp _type_Jv
_type_Ap: ; very far jump (imm.seg:imm.offset)
call put_tab
cmp _opsiz,0
jz @@l1
call put_texteax ; offset16
mov ebx,eax
shr eax,16
call makehexax
call put_colon
mov eax,ebx
jmp makehexax
@@l1: call put_texteax ; offset32
xchg eax,ebx
call put_textax
call makehexax
call put_colon
xchg eax,ebx
jmp makehexeax
_type_farjumpEv:
mov _jump_taken,1
_type_farEv:
call put_tab
call put_textal
call decode_mode
cmp _opsiz,0
mov ebp,offs _regtab16
mov edx,offs _text_far
jnz @@l1
mov ebp,offs _regtab32
mov edx,offs _text_far
@@l1: cmp ah,03h
jz @@l2
call put_string
@@l2: call decode_by_mod
cmp _opsiz,0
jnz put_memfw
jmp put_memfd
_type_pushIb:
call put_tab
call put_textal
and eax,00FFh
cmp _opsiz,0
jz @@l1
call makehexax
jmp put_charh
@@l1: call makehexeax
jmp put_charh
_type_pushs: ; segment register
call put_tab
shr al,3
and eax,07h
lea edx,_segtab86[eax*4]
jmp put_string
_type_pushd: ; pusha(d)/popa(d)
cmp _opsiz,0
jnz @@done
mov bptr [edi],'d'
inc edi
@@done: ret
_type_es:
mov _prefix,0
jmp _type_seg
_type_cs:
mov _prefix,1
jmp _type_seg
_type_ss:
mov _prefix,2
jmp _type_seg
_type_ds:
mov _prefix,3
jmp _type_seg
_type_fs:
mov _prefix,4
jmp _type_seg
_type_gs:
mov _prefix,5
_type_seg:
call decode2
mov _prefix,3
ret
_type_opsiz:
xor _opsiz,1
call decode2
xor _opsiz,1
ret
_type_adrsiz:
xor _adrsiz,1
call decode2
xor _adrsiz,1
ret
_type_rep:
call put_tab
jmp decode2
_type_cdq:
cmp _opsiz,0
jz @@l1
cmp al,98h
mov edx,offs _text_cbw
jz @@done
cmp al,99h
mov edx,offs _text_cwd
jz @@done
mov edx,offs _text_none
jmp @@done
@@l1: cmp al,98h
mov edx,offs _text_cwde
jz @@done
cmp al,99h
mov edx,offs _text_cdq
jz @@done
mov edx,offs _text_none
@@done: jmp put_string
_type_ALDX:
call put_tab
mov edx,offs _text_aldx
jmp put_string
_type_DXAL:
call put_tab
mov edx,offs _text_dxal
jmp put_string
_type_eAXDX:
call put_tab
cmp _opsiz,0
mov edx,offs _text_axdx
jnz @@l1
mov edx,offs _text_eaxdx
@@l1: jmp put_string
_type_DXeAX:
call put_tab
cmp _opsiz,0
mov edx,offs _text_dxax
jnz @@l1
mov edx,offs _text_dxeax
@@l1: jmp put_string
_type_jcxz:
cmp _adrsiz,0
jz @@l1
mov edx,offs _text_jcxz
cmp wptr _ecx,0
setz _jump_taken
jmp @@l2
@@l1: mov edx,offs _text_jecxz
cmp dptr _ecx,0
setz _jump_taken
@@l2: call put_string
jmp _type_Jb
_type_strb:
mov bptr [edi],'b'
inc edi
jmp _type_str
_type_strd:
cmp _opsiz,0
mov al,'w'
jnz @@l1
mov al,'d'
@@l1: mov [edi],al
inc edi
_type_str:
cmp _prefix,03h
jz _type_print
mov bptr [edi],' '
inc edi
jmp put_prefix
_type_print:
ret
;----------------------------------
_type_Ea:
call put_tab
call put_textal
call decode_mode
call decode_by_mod
jmp put_memd
_type_RdCd:
call put_tab
call put_textal
call decode_mode
movzx ebx,ch
lea edx,_crtab386[ebx*4]
call put_string
call put_comma
movzx ebx,cl
lea edx,_regtab32[ebx*4]
jmp put_string
_type_RdDd:
call put_tab
call put_textal
call decode_mode
movzx ebx,ch
lea edx,_drtab386[ebx*4]
call put_string
call put_comma
movzx ebx,cl
lea edx,_regtab32[ebx*4]
jmp put_string
_type_RdTd:
call put_tab
call put_textal
call decode_mode
movzx ebx,ch
lea edx,_trtab386[ebx*4]
call put_string
call put_comma
movzx ebx,cl
lea edx,_regtab32[ebx*4]
jmp put_string
_type_CdRd:
call put_tab
call put_textal
call decode_mode
movzx ebx,cl
lea edx,_regtab32[ebx*4]
call put_string
call put_comma
movzx ebx,ch
lea edx,_crtab386[ebx*4]
jmp put_string
_type_DdRd:
call put_tab
call put_textal
call decode_mode
movzx ebx,cl
lea edx,_regtab32[ebx*4]
call put_string
call put_comma
movzx ebx,ch
lea edx,_drtab386[ebx*4]
jmp put_string
_type_TdRd:
call put_tab
call put_textal
call decode_mode
movzx ebx,cl
lea edx,_regtab32[ebx*4]
call put_string
call put_comma
movzx ebx,ch
lea edx,_trtab386[ebx*4]
jmp put_string
_escape:
mov edx,offs _text_esc
call put_string
jmp _type_byte
_invalid:
push esi
dec esi
call load_byte
pop esi
mov edx,offs _text_byte
call put_string
jmp _type_byte
_type_esc: ; FPU escape code
call put_textal
_type_byte: ; invalid op-code: print DB
call put_tab
call makehexal
jmp put_charh
_type_aamd:
call put_string
call put_textal
cmp al,0Ah
jz @@1
call put_tab
call makehexal
call put_charh
@@1: ret
.DATA
;屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -