第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

這段匯編代碼什么意思啊?有了解的嗎

這段匯編代碼什么意思?。坑辛私獾膯?/h1>
push eaxpush edipush ecxmov al, byte ptr[esp + 0x8 + 0xC]mov edi, dword ptr[esp + 0x4 + 0xC]mov ecx, dword ptr[esp + 0xC + 0xC]rep stosbpop ecxpop edipop eaxret 0xC
查看完整描述

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ù)

 


查看完整回答
反對 回復(fù) 2023-02-15
?
holdtom

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


查看完整回答
反對 回復(fù) 2023-02-15
  • 2 回答
  • 0 關(guān)注
  • 124 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號