这段汇编代码什么意思啊?有了解的吗

push eax
push edi
push ecx

mov al, byte ptr[esp + 0x8 + 0xC]
mov edi, dword ptr[esp + 0x4 + 0xC]
mov ecx, dword ptr[esp + 0xC + 0xC]
rep stosb

pop ecx
pop edi
pop eax
ret 0xC

拉莫斯之舞
浏览 88回答 2
2回答

千巷猫影

push eax ;入栈push edi ;入栈push ecx ;入栈,这里的三句是为了保护寄存器的数据mov al, byte ptr[esp + 0x8 + 0xC] ;取一个字节的数据到ALmov edi, dword ptr[esp + 0x4 + 0xC] ;取一个BUFFER的地址mov ecx, dword ptr[esp + 0xC + 0xC] ;取这个BUFFER的大小rep stosb ;循环给BUFFER赋值,将AL赋给整个BUFFER,循环次数为BUFFER大小.pop ecx ;出栈pop edi ;出栈pop eax ;出栈,这里三句是为了恢复寄存器的数据ret 0xC ;ret是从子程序返回,后面的值是要平衡栈,即ESP+0XC--------------------------------------------------------------------------------你这段代码既然是C里面嵌的,我猜想你外部的C代码大概结构如下//我猜想C方法结构大概如下,实现的功能就是将BUFFER内存块全部实始化成指定的CHARvoid memsetChar(char *buffer,char c,int bufLen){__asm{这里是你求解释的汇编语言}}下面再给个调用的例子:char buffer[1024];memsetChar(buffer,'A',1024); //将数组全部初始化成字符A最后补充一句,那段汇编的功能等同于C函数 memset函数 

holdtom

push eax ;入栈push edi ;入栈push ecx ;入栈,这三次其实是想将参数利用栈来传递mov al, byte ptr[esp + 0x8 + 0xC];你前面缺少了子程序调用call部分,这部分是在子程序中想取出参数eax原值中的低八位,送入al中。为什么要加8,是前有call,又加12是对应第一次入栈的eaxmov edi, dword ptr[esp + 0x4 + 0xC]mov ecx, dword ptr[esp + 0xC + 0xC]rep stosbpop ecxpop edipop eaxret 0xC
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

数据结构