ASM32 7 DLL注入测试
代码示例MyTest.inc
1234567891011121314151617181920212223242526272829303132333435include windows.incinclude kernel32.incinclude user32.incinclude Comctl32.incinclude shell32.incinclude msvcrt.incinclude psapi.incincludelib kernel32.libincludelib user32.libincludelib Comctl32.libincludelib shell32.libincludelib msvcrt.libincludelib psapi.libDlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM.constMY_MSG db "click",0MY_WND_NAME db "计算机",0MY_USER32 db "USER32.dll",0MY_MSGBOX ...
ASM32 6 RadASM的使用
RadASM配置及应用RadASM配置参考 https://blog.csdn.net/2301_79113923/article/details/135665466
在路径设置中设置为自己的masm32和Ollydbg的路径
代码测试1
MyTest.inc1234567891011121314151617181920212223242526include windows.incinclude kernel32.incinclude user32.incinclude Comctl32.incinclude shell32.incincludelib kernel32.libincludelib user32.libincludelib Comctl32.libincludelib shell32.libDlgProc PROTO :HWND,:UINT,:WPARAM,:LPARAM.constMY_MSG db "click",0IDD_DIALOG1 equ 101BTN_BUTTON1 equ 1001;#################### ...
ASM32 5 使用C库函数和调用对话框
使用C库函数示例代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354.386.model flat,stdcallOPTION CASEMAP:noneinclude msvcrt.incinclude kernel32.incincludelib user32.libincludelib kernel32.libincludelib msvcrt.lib;包含动态库;includelib libc.lib;包含静态库.constMY_STRING db "51asm51asm:%d",0dh,0ah,0MY_PAUSE db "pause",0;代码区.codemyadd proc retmyadd endpstrlen proto c:dwordprintf proto c:VARARGSTART proc ;C库的使用 c调用约定 local buf1[10]:byte local buf2[ ...
ASM32 4 masm32汇编环境配置和简单代码示例
masm32汇编环境配置下载并安装masm32打开http://www.masm32.com/download/masm32v11r.zip
下载masm32,并将压缩包解压,解压完成后,运行安装文件install.exe,具体安装步骤除了指定路径,就一路YES|OK就可以。
然后在这两处添加masm32中lib和include文件夹的地址
容易出现的问题可能在编译的时候出现错误:A2026 constant expected
解决方案:https://blog.csdn.net/weixin_50836014/article/details/124880063
代码示例12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394.386 ;指令集.model flat,stdcal ...
ASM32 3 宏汇编
宏汇编宏——具有宏名的一段汇编语句序列——宏定义时书写
宏指令——这段汇编语句序列的缩写——宏调用时书写
宏展开——宏指令处用这段宏代替的过程——宏汇编时实现
宏的功能强大,颇具特色
宏定义1234宏名 macro [形参表] 宏定义体 endm宏注释符 ;;
12345678910main MACRO ;定义名为main的宏,无参数 mov ax,@data ;;宏定义体 mov ds,ax ENDM ;;宏定义结束 return MACRO retnum ;;带有形参return mov al,retnum ;;宏定义中使用参数 mov ah,4ch int 21h ENDM
宏调用1宏名 [实参表]
1234start: main ;宏调用,建立DS内容 dispmsg string ;宏调用,显示字符串 return 0 ;宏调用,返回DOS end start
宏调用的实质是在汇编过程中进行宏展开
宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的指令,同时用位置匹配的实参对形参进行取代 ...
ASM32 2 简单的32位汇编程序
简单的32位汇编程序hello.inc
1234567891011121314151617181920.386 ;指令集.model flat,stdcall ;平坦模式(不分段)OPTION CASEMAP:none ;大小写敏感;常量区.constMY_MSG db "Hello World!",0MY_TITLE db "51asm",0;未初始化数据区;.data?;NUM2 db ? ;不占用文件空间;初始化数据区.dataNUM1 db 0;函数声明MessageBoxA proto hWnd:dword,lpText:dword,lpCaption:dword,uType:dwordExitProcess proto uExitCode:dword
hello.asm
1234567891011121314151617181920212223242526272829303132333435include hello.incincludelib user32.libincludelib ...
ASM32 1 配置asm32环境
基本运行环境打开VS2019,新建C++空项目
生成依赖项右键项目名称,依次选择生成依赖项、生成自定义
在弹出的窗口中勾选masm,点击确定
添加汇编源文件右键“源文件“文件夹,依次选择添加、新建项
在弹出的窗口中选择C++文件(.cpp),注意名称中的后缀名要改为.asm
右键源文件,选择属性,配置如下
至此汇编语言的基本运行环境配置完毕
添加Irvine32链接库Irvine32 链接库提供了很多简单的输入输岀接口,因此有必要添加Irvine32链接库,方便后续编程
下载并解压Irvine32 链接库文件下载地址Assembly Language for x86 Processors (asmirvine.com)
记住解压的路径,配置VS2019需要用到
配置VS2019右键项目,选择属性,打开属性页面板
选择“Microsoft Macro Assembler”→“General” ,在Include Paths一栏输入Irvine32文件解压的路径
选择“链接器”→“常规”→“附加库目录”,输入 Irvine32文件解压的路径
选择“链接器”→“输入”→ ...
ASM16 25 串操作类指令
串操作类指令
串操作指令是8086指令系统中比较独特的一类指令,采用比较特殊的数据串寻址方式,在操作主存连续区域的数据时,特别好用、因而常用
重要掌握:MOVS STOS LODS CMPS SCAS REP
一般了解:REPZ/REPE REPNZ/REPNE
串数据类型
串操作指令的操作数是主存中连续存放的数据串(String)——即在连续的主存区域中,字节或字的序列
串操作指令的操作对象是以字(W)为单位的字串,或是以字节(B)为单位的字节串
串存储STOS(store string)
把AL或AX数据传送至目的地址
串读取LODS(load string)
把指定主存单元的数据传送给AL或AX
串比较CMPS(compare string)
将主存中的源操作数减去至目的操作数,以便设置标志,进而比较两操作数之间的关系
串扫描SCAS(scan string)
将AL/AX减去至目的操作数,以便设置标志,进而比较AL/AX与操作数之间的关系
重复前缀指令(repeat)
串操作指令执行一次,仅对数据串中的一个 ...
ASM16 23-24 位操作类指令
位操作类指令
位操作类指令以二进制位为基本单位进行数据的操作;这是一类常用的指令,都应该特别掌握
注意这些指令对标志位的影响
逻辑运算指令 AND OR XOR NOT TEST
移位指令 SHL SHR SAR
循环移位指令 ROL ROR RCL RCR
逻辑运算指令12345mov ax,-1and ax,8000h ;某位清0or ax,1 ;某位置1xor ax,0fh ;某位取反not ax
运行结果
移位指令
SHL(逻辑左移(无符号))
SHR(逻辑右移(无符号))
SAL(算术左移(有符号))(同SHL)
SAR(算术右移(有符号))
1234mov ax,0fhsar ax,1shl ax,1shr ax,1
运行结果(若最高位为0则算术右移后也补0)
12mov ax,0ffffhsar ax,1
若最高位为1则算术右移后也补1
循环移位指令(rotate)
将操作数从另一端溢移出的位返回到另一端形成循环,分成不带进位和带进位,分别具有左移或右移操作
循环移位指令对标志的影响
按照指令功能设置进位标 ...
ASM16 22-23 处理机控制类指令
处理机控制类指令
这些指令在特定的情况下,必须使用
对标志位进行设置的指令
CLC STC CMC
CLD STD
CLI STI
对CPU状态进行控制的指令
NOP CS:SS:DS:ES:
LOCK HLT ESC WAIT
进位标志操作指令
用于任意设置进位标志
123clc ;复位进位标志:cf=0stc ;置位进位标志:cf=1cmc ;求反进位标志:cf=~cf
方向标志操作指令
串操作指令中,需要使用
12cld ;复位方向标志:df=0std ;置位方向标志:df=1
中断标志操作指令
在编写中断服务程序时,需要控制可屏蔽中断的允许和禁止
12cli ;复位中断标志:if=0sti ;置位中断标志:if=1
空操作指令
NOP不执行任何操作,但占用一个字节存储单元,空耗一个指令执行周期
NOP常用于程序调试
在需要预留指令空间时用NOP填充
代码空间多余时也可以用NOP填充
还可以用NOP实现软件延时
事实上,NOP和XCHG AX,AX的指令代码一样,都是90H
12345678910111 ...