-
-
分享自己写的反汇编DLL支持16,32,64位代码
-
发表于: 2014-3-3 11:04 4070
-
指令代码参照书籍:64-ia-32-architectures-software-developer-instruction-set-reference-manual-325383.pdf
函数名称及说明
UASMX86 proto codep:LPBYTE,retbuf:Dword,bitx:DWORD,codeaddr:LPDWORD
;;; codep : [IN] 指向要反汇编的数据
;;; retb : [OUT] 用于返回反汇编后的指令长度及指令字符串
;;; +0:dword 返回汇编指令的长度
;;; +4:反汇编后指令字符串
;;; bitx : [IN] 取值16,32或者64,指示反汇编代码是16位,32位还是64位的
;;; codeaddr: [IN] 存要汇编数据在程序中的地址[64时,存的必须是64地址] [用于计算转移指令的地址,不是转移指令时,没有用到该指针]
汇编程序的演示代码
; #########################################################################
.586
.model flat, stdcall
option casemap :none ; case sensitive
; #########################################################################
include d:\masm32\include\windows.inc
include d:\MASM32\INCLUDE\masm32.inc
include d:\masm32\include\user32.inc
include d:\masm32\include\kernel32.inc
include codeasm.inc
; libraries
; ~~~~~~~~~
includelib d:\MASM32\LIB\masm32.lib
includelib d:\masm32\lib\user32.lib
includelib d:\masm32\lib\kernel32.lib
includelib codeasm.lib
;======================================================================================================
.data
szName16 db "16反汇编指令码",0
szName32 db "32反汇编指令码",0
szName64 db "64反汇编指令码",0
msg db 256 dup(0)
asmtest db 31h,07ch,08bh,0ch,025h,20h,0h,0h,00,88h,100 dup(90h)
codeaddr dd 400000h,0
.code
start:
invoke UASMX86,addr asmtest,addr msg,16,addr codeaddr
invoke MessageBox,0,ADDR msg[4],ADDR szName16,MB_OK ;;;显示反汇编的16位代码
invoke UASMX86,addr asmtest,addr msg,32,addr codeaddr
invoke MessageBox,0,ADDR msg[4],ADDR szName32,MB_OK ;;;显示反汇编的32位代码
invoke UASMX86,addr asmtest,addr msg,64,addr codeaddr
invoke MessageBox,0,ADDR msg[4],ADDR szName64,MB_OK ;;;显示反汇编的64位代码
ret
end start
函数名称及说明
UASMX86 proto codep:LPBYTE,retbuf:Dword,bitx:DWORD,codeaddr:LPDWORD
;;; codep : [IN] 指向要反汇编的数据
;;; retb : [OUT] 用于返回反汇编后的指令长度及指令字符串
;;; +0:dword 返回汇编指令的长度
;;; +4:反汇编后指令字符串
;;; bitx : [IN] 取值16,32或者64,指示反汇编代码是16位,32位还是64位的
;;; codeaddr: [IN] 存要汇编数据在程序中的地址[64时,存的必须是64地址] [用于计算转移指令的地址,不是转移指令时,没有用到该指针]
汇编程序的演示代码
; #########################################################################
.586
.model flat, stdcall
option casemap :none ; case sensitive
; #########################################################################
include d:\masm32\include\windows.inc
include d:\MASM32\INCLUDE\masm32.inc
include d:\masm32\include\user32.inc
include d:\masm32\include\kernel32.inc
include codeasm.inc
; libraries
; ~~~~~~~~~
includelib d:\MASM32\LIB\masm32.lib
includelib d:\masm32\lib\user32.lib
includelib d:\masm32\lib\kernel32.lib
includelib codeasm.lib
;======================================================================================================
.data
szName16 db "16反汇编指令码",0
szName32 db "32反汇编指令码",0
szName64 db "64反汇编指令码",0
msg db 256 dup(0)
asmtest db 31h,07ch,08bh,0ch,025h,20h,0h,0h,00,88h,100 dup(90h)
codeaddr dd 400000h,0
.code
start:
invoke UASMX86,addr asmtest,addr msg,16,addr codeaddr
invoke MessageBox,0,ADDR msg[4],ADDR szName16,MB_OK ;;;显示反汇编的16位代码
invoke UASMX86,addr asmtest,addr msg,32,addr codeaddr
invoke MessageBox,0,ADDR msg[4],ADDR szName32,MB_OK ;;;显示反汇编的32位代码
invoke UASMX86,addr asmtest,addr msg,64,addr codeaddr
invoke MessageBox,0,ADDR msg[4],ADDR szName64,MB_OK ;;;显示反汇编的64位代码
ret
end start
赞赏
他的文章
看原图
赞赏
雪币:
留言: