您的位置:首页 > 编程语言

gh0st源码阅读--监控代码

2014-11-14 23:00 302 查看
void UIScreenItem::DrawNextScreenDiff()
{
bool	bIsReDraw = false;
int	nHeadLength = 1 + 1 + sizeof(POINT) + sizeof(BYTE);
LPVOID	lpFirstScreen = m_lpScreenDIB;
LPVOID	lpNextScreen = m_pContext->m_DeCompressionBuffer.GetBuffer(nHeadLength);
DWORD	dwBytes = m_pContext->m_DeCompressionBuffer.GetBufferLen() - nHeadLength;

if (dwBytes > 0)
bIsReDraw = true;

//这段落代码就是不停的迭代,首先是偏移量,然后是长度,以此类推,直到把所有的数据读完。
__asm
{
mov ebx, [dwBytes]
mov esi, [lpNextScreen]
jmp	CopyEnd

CopyNextBlock:
mov edi, [lpFirstScreen]
lodsd			// 把lpNextScreen的第一个双字节,放到eax中,就是DIB中改变区域的偏移
add edi, eax	<span style="white-space:pre">	</span>// lpFirstScreen偏移eax
lodsd			// 把lpNextScreen的下一个双字节,放到eax中, 就是改变区域的大小
mov ecx, eax
sub ebx, 8		// ebx 减去 两个dword
sub ebx, ecx	        // ebx 减去DIB数据的大小
rep movsb               // 拷贝数据,根所ecx中的内容来决定循环后的次数,这里应当是拷贝到edx所指的地方

CopyEnd:
cmp ebx, 0		// 是否写入完毕,ebx中的是所有的字节数
jnz CopyNextBlock
}

if (bIsReDraw)
Invalidate();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: