這段匯編代碼什么意思?。坑辛私獾膯?/h1>
2 回答

TA貢獻(xiàn)1829條經(jīng)驗 獲得超7個贊
push eax ;入棧
push edi ;入棧
push ecx ;入棧,這里的三句是為了保護(hù)寄存器的數(shù)據(jù)
mov al, byte ptr[esp + 0x8 + 0xC] ;取一個字節(jié)的數(shù)據(jù)到AL
mov edi, dword ptr[esp + 0x4 + 0xC] ;取一個BUFFER的地址
mov ecx, dword ptr[esp + 0xC + 0xC] ;取這個BUFFER的大小
rep stosb ;循環(huán)給BUFFER賦值,將AL賦給整個BUFFER,循環(huán)次數(shù)為BUFFER大小.
pop ecx ;出棧
pop edi ;出棧
pop eax ;出棧,這里三句是為了恢復(fù)寄存器的數(shù)據(jù)
ret 0xC ;ret是從子程序返回,后面的值是要平衡棧,即ESP+0XC
--------------------------------------------------------------------------------
你這段代碼既然是C里面嵌的,我猜想你外部的C代碼大概結(jié)構(gòu)如下
//我猜想C方法結(jié)構(gòu)大概如下,實現(xiàn)的功能就是將BUFFER內(nèi)存塊全部實始化成指定的CHAR
void memsetChar(char *buffer,char c,int bufLen)
{
__asm{
這里是你求解釋的匯編語言
}
}
下面再給個調(diào)用的例子:
char buffer[1024];
memsetChar(buffer,'A',1024); //將數(shù)組全部初始化成字符A
最后補(bǔ)充一句,那段匯編的功能等同于C函數(shù) memset函數(shù)

TA貢獻(xiàn)1805條經(jīng)驗 獲得超10個贊
push eax ;入棧
push edi ;入棧
push ecx ;入棧,這三次其實是想將參數(shù)利用棧來傳遞
mov al, byte ptr[esp + 0x8 + 0xC];你前面缺少了子程序調(diào)用call部分,這部分是在子程序中想取出參數(shù)eax原值中的低八位,送入al中。為什么要加8,是前有call,又加12是對應(yīng)第一次入棧的eax
mov edi, dword ptr[esp + 0x4 + 0xC]
mov ecx, dword ptr[esp + 0xC + 0xC]
rep stosb
pop ecx
pop edi
pop eax
ret 0xC
- 2 回答
- 0 關(guān)注
- 124 瀏覽
添加回答
舉報