32ASM-串操作
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.
7
hsy
串操作指令
串传送指令MOVS 串传送指令 串存储指令STOS 串存储指令 串读取指令LODS 串读取指令 串比较指令CMPS 串比较指令 串扫描指令SCAS 串扫描指令
ASM
2010-6-30
8
hsy
串传送 MOVS
MOVS 目的串,源串 目的串,
MOVSB / MOVSW / MOVSD
2010-6-30
5
hsy
重复前缀指令 REP
REP REP REP LODS / LODSB/LODSW/LODSD STOS/STOSB/STOSW/STOSD MOVS/MOVSB/MOVSW/MOVSD
ASM
REP:重复其后的字符串操作指令,重复的次数 :重复其后的字符串操作指令, 由ECX来决定 来决定
串操作指令 标志位操作指令
2010-6-30
3
hsy
串操作指令的寻址方式
两个重要寄存器
源操作数用寄存器ESI寻址 寻址 源操作数用寄存器 目的操作数用寄存器EDI寻址 目的操作数用寄存器 寻址
ASM
每执行一次串操作指令,ESI和EDI将自动修改 每执行一次串操作指令, 和 将自动修改
±1(对于字节串)或±2(对于字串)或±4(对于双 (对于字节串) (对于字串) ( 字串) 字串) DF = 0,地址指针增 或2或4 ,地址指针增1或 或 DF = 1,地址指针减 或2或4 ,地址指针减1或 或 方向标志操作指令
2010-6-30
6
hsy
条件重复前缀指令
相等重复前缀指令REPE/REPZ 相等重复前缀指令 不等重复前缀指令REPE/REPZ 不等重复前缀指令
ASM
与前面的重复前缀指令功能相类似,所不同的是: 与前面的重复前缀指令功能相类似,所不同的是:其重复次数不仅 来决定, 来决定. 由ECX来决定,而且还会由标志位 来决定. 来决定 而且还会由标志位ZF来决定
15
hsy
教学要求
掌握标志位操作指令 CLC/STC/CMC/STD/CLD 掌握串操作指令
MOVS/CMPS/SCAS/LODS/LTOS
ASM
掌握串重复前缀的使用
REP REPZ / REPNZ
学会利用串操作指令编写字符串操作程序
2010-6-30 16
�
2010-6-30
4
hsy
方向标志操作指令
CLD STD ;复位方向标志:DF 0 复位方向标志: 复位方向标志 ;置位方向标志:DF 1 置位方向标志: 置位方向标志
ASM
在串操作指令使用之前, 在串操作指令使用之前,通常应先设 方向标志,以决定ESI / EDI是增量还 置 方向标志,以决定 是增量还 是减量. 是减量.
LODS指令一般不用重复前缀. 指令一般不用重复前缀. 指令一般不用重复前缀
2010-6-30
13
hsy
串存储指令 STOS
指令格式: 指令格式: STOS 目的串
STOSB,STOSW,STOSD , , 功 能:[EDI] AL / AX / EAX
ASM
操作说明
的内容传送到由EDI作为指针的目的 将AL或AX或EAX的内容传送到由 或 或 的内容传送到由 作为指针的目的 串中,然后自动修改地址指针,指向下一元素. 串中,然后自动修改地址指针,指向下一元素.
11
2010-6-30
hsy
串搜索 SCAS
指令格式: 指令格式: SCAS 目的串
SCASB ,SCASW ,SCASD 功 能: AL/AX / EAX - [EDI] /
ASM
操作说明
的内容减去由EDI作为指针的目 将AL/AX/EAX的内容减去由 的内容减去由 作为指针的目 的串元素,结果影响标志寄存器, 的串元素,结果影响标志寄存器,但 AL/AX/EAX内容不变. 内容不变. 内容不变
STOS指令与 指令与REP联用时,可以把 联用时, 指令与 联用时 可以把EAX或AX或AL 或 或 中的内容存入一段指定长度的存储空间中且内容 相同 一段存储区间的初始化
2010-6-30
14
hsy
串操作实例
strlen strcmp strcat strcpy strchr
ASM
2010-6-30
相等重复前缀指令
REPE/REPZ REPE/REPZ SCAS CMPS
不等重复前缀指令
REPNE/REPNZ REPNE/REPNZ SCAS CMPS
执行步骤
判断条件: 判断条件:ECX≠0 且 ZF=1; ; 2. 如果条件不成立,则结束重复 如果条件不成立, 操作, 操作,执行程序中的下一条指 令; 3. 否则,ECX=ECX-1(不影响有 否则, 不影响有 关标志位), 关标志位 ,并执行其后的字符 串操作指令, 串操作指令,在该指令执行完 再转到步骤(1) 后,再转到步骤 .
ASM
操作说明
MOVS指令将由 指令将由ESI作为指针的源串中的一个字节 字/ 作为指针的源串中的一个字节/字 指令将由 作为指针的源串中的一个字节 双字传送到由EDI为指针的目的串 双字传送到由 为指针的目的串 自动修改地址指针,指向下一字节/ 自动修改地址指针,指向下一字节/字 / 双字
重复前缀REP联用 联用 重复前缀
注意:搜索到关键字后, 注意:搜索到关键字后,EDI指向的是下一 指向的是下一 个字符的地址. 个字符的地址.
2010-6-30 12
hsy
串取出指令
指令格式: 指令格式: LODS 源串
LODSB ,LODSW,LODSD ,
ASM
功能: 功能: AL/AX /EAX / 操作说明
[ESI]
将由ESI作为指针的源串元素传送到 或AX或 作为指针的源串元素传送到AL或 或 将由 作为指针的源串元素传送到 EAX中,然后自动修改指针,指向下一个元素. 中 然后自动修改指针,指向下一个元素.
ASM
2010-6-30
10
hsy
串比较 CMPS
CMPS 源串,目的串 源串,
CMPSB,CMPSW,CMPSD , ,
ASM
操作说明
将由ESI作为指针的源串中的一个元素 字节或字或双 作为指针的源串中的一个元素(字节或字或双 将由 作为指针的源串中的一个元素 )与由 与由EDI为指针的目的串的相应元素相比较 为指针的目的串的相应元素相比较(源串减 字)与由EDI为指针的目的串的相应元素相比较(源串减 去目的串,结果不送回目的串,但影响标志位), 去目的串,结果不送回目的串,但影响标志位 ,然后 自动修改地址指针,指向下一元素. 自动修改地址指针,指向下一元素.
REPwenku.baidu.com行步骤如下: 执行步骤如下: 执行步骤如下
(1)判断:ECX=0; 判断: 判断 ; (2)如果 如果ECX=0,则结束重复操作,执行下一条指令; ,则结束重复操作,执行下一条指令; 如果 (3)否则,ECX=ECX-1(不影响有关标志位 ,并执行其后 否则, 不影响有关标志位), 否则 不影响有关标志位 的字符串操作指令,在该指令执行完后,再转到步骤(1). 的字符串操作指令,在该指令执行完后,再转到步骤 .
1.
2010-6-30
执行步骤
判断条件: 判断条件:ECX≠0 且 ZF=0; ; 2. 如果条件不成立,则结束重复 如果条件不成立, 操作, 操作,执行程序中的下一条指 令; 3. 否则,ECX=ECX-1(不影响有 否则, 不影响有 关标志位), 关标志位 ,并执行其后的字符 串操作指令, 串操作指令,在该指令执行完 再转到步骤(1). 后,再转到步骤 .
CMPS指令条件重复前缀 指令条件重复前缀REPE或REPNE配合 指令条件重复前缀 或 配合
用REPE时,检查两个字符串是否相同,发现不同立即 时 检查两个字符串是否相同, 停止比较. 停止比较. 用REPNE时:检查两个字符串是否不同,发现相同立 时 检查两个字符串是否不同, 即停上比较. 即停上比较.
实现整个数据块的传送. 实现整个数据块的传送. REP MOVSB / MOVSW / MOVSD ECX:传送次数 :
2010-6-30
9
hsy
例:字符串拷贝
.386 .model flat, stdcall option casemap:none .data szStr1 db 'a test string', 0 szStr2 db 64(0) .code main proc push LENGTHOF szStr1 push OFFSET szStr1 push OFFSET szStr2 call strncpy ret main endp strncpy proc, str1:dword, str2:dword, len:dword push edi push esi mov edi, str1 mov esi, str2 mov ecx, len cld rep movsb pop esi pop edi ret strncpy endp
串操作
黄诗勇 计算机学院信息安全系 hsycug@yahoo.cn
2010-6-30 1
hsy
教学重点
串操作指令
串传送MOVS 串传送 串比较CMPS 串比较 串搜索SCAS 串搜索 串读取LODS 串读取 串存储STOS 串存储 重复前缀指令REP 重复前缀指令
ASM
字符串操作编程
2010-6-30 2
hsy
串操作
字节串: 字节串:由多个字节数据组成的数据串 字串: 字串:由多个字数据组成的数据串 双字串: 双字串:由多个双字数据组成的数据串
ASM
内存的连续单元中存放的多个数据叫做" 内存的连续单元中存放的多个数据叫做"串".
对数据串进行的操作称为串操作 IA-32CPU提供了串操作指令和串操作重复前缀. 提供了串操作指令和串操作重复前缀. 提供了串操作指令和串操作重复前缀
7
hsy
串操作指令
串传送指令MOVS 串传送指令 串存储指令STOS 串存储指令 串读取指令LODS 串读取指令 串比较指令CMPS 串比较指令 串扫描指令SCAS 串扫描指令
ASM
2010-6-30
8
hsy
串传送 MOVS
MOVS 目的串,源串 目的串,
MOVSB / MOVSW / MOVSD
2010-6-30
5
hsy
重复前缀指令 REP
REP REP REP LODS / LODSB/LODSW/LODSD STOS/STOSB/STOSW/STOSD MOVS/MOVSB/MOVSW/MOVSD
ASM
REP:重复其后的字符串操作指令,重复的次数 :重复其后的字符串操作指令, 由ECX来决定 来决定
串操作指令 标志位操作指令
2010-6-30
3
hsy
串操作指令的寻址方式
两个重要寄存器
源操作数用寄存器ESI寻址 寻址 源操作数用寄存器 目的操作数用寄存器EDI寻址 目的操作数用寄存器 寻址
ASM
每执行一次串操作指令,ESI和EDI将自动修改 每执行一次串操作指令, 和 将自动修改
±1(对于字节串)或±2(对于字串)或±4(对于双 (对于字节串) (对于字串) ( 字串) 字串) DF = 0,地址指针增 或2或4 ,地址指针增1或 或 DF = 1,地址指针减 或2或4 ,地址指针减1或 或 方向标志操作指令
2010-6-30
6
hsy
条件重复前缀指令
相等重复前缀指令REPE/REPZ 相等重复前缀指令 不等重复前缀指令REPE/REPZ 不等重复前缀指令
ASM
与前面的重复前缀指令功能相类似,所不同的是: 与前面的重复前缀指令功能相类似,所不同的是:其重复次数不仅 来决定, 来决定. 由ECX来决定,而且还会由标志位 来决定. 来决定 而且还会由标志位ZF来决定
15
hsy
教学要求
掌握标志位操作指令 CLC/STC/CMC/STD/CLD 掌握串操作指令
MOVS/CMPS/SCAS/LODS/LTOS
ASM
掌握串重复前缀的使用
REP REPZ / REPNZ
学会利用串操作指令编写字符串操作程序
2010-6-30 16
�
2010-6-30
4
hsy
方向标志操作指令
CLD STD ;复位方向标志:DF 0 复位方向标志: 复位方向标志 ;置位方向标志:DF 1 置位方向标志: 置位方向标志
ASM
在串操作指令使用之前, 在串操作指令使用之前,通常应先设 方向标志,以决定ESI / EDI是增量还 置 方向标志,以决定 是增量还 是减量. 是减量.
LODS指令一般不用重复前缀. 指令一般不用重复前缀. 指令一般不用重复前缀
2010-6-30
13
hsy
串存储指令 STOS
指令格式: 指令格式: STOS 目的串
STOSB,STOSW,STOSD , , 功 能:[EDI] AL / AX / EAX
ASM
操作说明
的内容传送到由EDI作为指针的目的 将AL或AX或EAX的内容传送到由 或 或 的内容传送到由 作为指针的目的 串中,然后自动修改地址指针,指向下一元素. 串中,然后自动修改地址指针,指向下一元素.
11
2010-6-30
hsy
串搜索 SCAS
指令格式: 指令格式: SCAS 目的串
SCASB ,SCASW ,SCASD 功 能: AL/AX / EAX - [EDI] /
ASM
操作说明
的内容减去由EDI作为指针的目 将AL/AX/EAX的内容减去由 的内容减去由 作为指针的目 的串元素,结果影响标志寄存器, 的串元素,结果影响标志寄存器,但 AL/AX/EAX内容不变. 内容不变. 内容不变
STOS指令与 指令与REP联用时,可以把 联用时, 指令与 联用时 可以把EAX或AX或AL 或 或 中的内容存入一段指定长度的存储空间中且内容 相同 一段存储区间的初始化
2010-6-30
14
hsy
串操作实例
strlen strcmp strcat strcpy strchr
ASM
2010-6-30
相等重复前缀指令
REPE/REPZ REPE/REPZ SCAS CMPS
不等重复前缀指令
REPNE/REPNZ REPNE/REPNZ SCAS CMPS
执行步骤
判断条件: 判断条件:ECX≠0 且 ZF=1; ; 2. 如果条件不成立,则结束重复 如果条件不成立, 操作, 操作,执行程序中的下一条指 令; 3. 否则,ECX=ECX-1(不影响有 否则, 不影响有 关标志位), 关标志位 ,并执行其后的字符 串操作指令, 串操作指令,在该指令执行完 再转到步骤(1) 后,再转到步骤 .
ASM
操作说明
MOVS指令将由 指令将由ESI作为指针的源串中的一个字节 字/ 作为指针的源串中的一个字节/字 指令将由 作为指针的源串中的一个字节 双字传送到由EDI为指针的目的串 双字传送到由 为指针的目的串 自动修改地址指针,指向下一字节/ 自动修改地址指针,指向下一字节/字 / 双字
重复前缀REP联用 联用 重复前缀
注意:搜索到关键字后, 注意:搜索到关键字后,EDI指向的是下一 指向的是下一 个字符的地址. 个字符的地址.
2010-6-30 12
hsy
串取出指令
指令格式: 指令格式: LODS 源串
LODSB ,LODSW,LODSD ,
ASM
功能: 功能: AL/AX /EAX / 操作说明
[ESI]
将由ESI作为指针的源串元素传送到 或AX或 作为指针的源串元素传送到AL或 或 将由 作为指针的源串元素传送到 EAX中,然后自动修改指针,指向下一个元素. 中 然后自动修改指针,指向下一个元素.
ASM
2010-6-30
10
hsy
串比较 CMPS
CMPS 源串,目的串 源串,
CMPSB,CMPSW,CMPSD , ,
ASM
操作说明
将由ESI作为指针的源串中的一个元素 字节或字或双 作为指针的源串中的一个元素(字节或字或双 将由 作为指针的源串中的一个元素 )与由 与由EDI为指针的目的串的相应元素相比较 为指针的目的串的相应元素相比较(源串减 字)与由EDI为指针的目的串的相应元素相比较(源串减 去目的串,结果不送回目的串,但影响标志位), 去目的串,结果不送回目的串,但影响标志位 ,然后 自动修改地址指针,指向下一元素. 自动修改地址指针,指向下一元素.
REPwenku.baidu.com行步骤如下: 执行步骤如下: 执行步骤如下
(1)判断:ECX=0; 判断: 判断 ; (2)如果 如果ECX=0,则结束重复操作,执行下一条指令; ,则结束重复操作,执行下一条指令; 如果 (3)否则,ECX=ECX-1(不影响有关标志位 ,并执行其后 否则, 不影响有关标志位), 否则 不影响有关标志位 的字符串操作指令,在该指令执行完后,再转到步骤(1). 的字符串操作指令,在该指令执行完后,再转到步骤 .
1.
2010-6-30
执行步骤
判断条件: 判断条件:ECX≠0 且 ZF=0; ; 2. 如果条件不成立,则结束重复 如果条件不成立, 操作, 操作,执行程序中的下一条指 令; 3. 否则,ECX=ECX-1(不影响有 否则, 不影响有 关标志位), 关标志位 ,并执行其后的字符 串操作指令, 串操作指令,在该指令执行完 再转到步骤(1). 后,再转到步骤 .
CMPS指令条件重复前缀 指令条件重复前缀REPE或REPNE配合 指令条件重复前缀 或 配合
用REPE时,检查两个字符串是否相同,发现不同立即 时 检查两个字符串是否相同, 停止比较. 停止比较. 用REPNE时:检查两个字符串是否不同,发现相同立 时 检查两个字符串是否不同, 即停上比较. 即停上比较.
实现整个数据块的传送. 实现整个数据块的传送. REP MOVSB / MOVSW / MOVSD ECX:传送次数 :
2010-6-30
9
hsy
例:字符串拷贝
.386 .model flat, stdcall option casemap:none .data szStr1 db 'a test string', 0 szStr2 db 64(0) .code main proc push LENGTHOF szStr1 push OFFSET szStr1 push OFFSET szStr2 call strncpy ret main endp strncpy proc, str1:dword, str2:dword, len:dword push edi push esi mov edi, str1 mov esi, str2 mov ecx, len cld rep movsb pop esi pop edi ret strncpy endp
串操作
黄诗勇 计算机学院信息安全系 hsycug@yahoo.cn
2010-6-30 1
hsy
教学重点
串操作指令
串传送MOVS 串传送 串比较CMPS 串比较 串搜索SCAS 串搜索 串读取LODS 串读取 串存储STOS 串存储 重复前缀指令REP 重复前缀指令
ASM
字符串操作编程
2010-6-30 2
hsy
串操作
字节串: 字节串:由多个字节数据组成的数据串 字串: 字串:由多个字数据组成的数据串 双字串: 双字串:由多个双字数据组成的数据串
ASM
内存的连续单元中存放的多个数据叫做" 内存的连续单元中存放的多个数据叫做"串".
对数据串进行的操作称为串操作 IA-32CPU提供了串操作指令和串操作重复前缀. 提供了串操作指令和串操作重复前缀. 提供了串操作指令和串操作重复前缀