这个汇编代码是做什么用的?

时间:2013-11-17 14:03:47

标签: assembly x86 disassembly

我是汇编语言的新手,我想知道下面代码的作用:

Address   Hex dump          Command                                                        
01356A60  /$  53            PUSH EBX                                                            
01356A61  |.  8BD9          MOV EBX,ECX
01356A63  |.  8B43 04       MOV EAX,DWORD PTR DS:[EBX+4]
01356A66  |.  56            PUSH ESI
01356A67  |.  8B70 10       MOV ESI,DWORD PTR DS:[EAX+10]
01356A6A  |.  85F6          TEST ESI,ESI
01356A6C  |.- 74 5B         JZ SHORT 01356AC9
01356A6E  |.  8BC6          MOV EAX,ESI
01356A70  |.  8D50 01       LEA EDX,[EAX+1]
01356A73  |>  8A08          /MOV CL,BYTE PTR DS:[EAX]
01356A75  |.  40            |INC EAX
01356A76  |.  84C9          |TEST CL,CL
01356A78  |.- 75 F9         \JNZ SHORT 01356A73
01356A7A  |.  2BC2          SUB EAX,EDX
01356A7C  |.  57            PUSH EDI
01356A7D  |.  8BF8          MOV EDI,EAX
01356A7F  |.- 74 47         JZ SHORT 01356AC8

我能理解的是运行这部分代码的是EAX,例如“abcdefg”,EDX有“bcdefg”(没有第一个字母的相同字符串) ,并且在循环期间,EAX每次增加吃一个字母......但例如MOV CL,BYTE PTR DS:[EAX],它的目标是什么?那些像我这样的新手看不到的模式代码是什么?

提前致谢

1 个答案:

答案 0 :(得分:2)

有一种模式,它被称为“汇编程序”。如果您需要就个人指示寻求帮助,那么您还没有准备好接受全部功能。

   MOV CL,BYTE PTR DS:[EAX]“,它的目标是什么?

目标是将ds:[eax]中存储的地址加载到8位寄存器cl中。

通常,单个指令没有“目标”。较大的上下文表明循环是找到以零结尾的字符串的结尾。正如您所希望的那样,eax中找到的字符串“end”将被edx减去 - 字符串start - 然后减去指向字符串结尾的指针以字符串 length 开始结果。之后,该示例逐渐(可能)设置了一个进行进一步处理的例程。