.686 ; create 32 bit code
.mmx
.xmm
.model flat, stdcall ; 32 bit memory model
option casemap :none ; case sensitive
.code
; ml -c /omf ad.asm
; Microsoft (R) Macro Assembler Version 10.00.30319.01
; Copyright (C) Microsoft Corporation. All rights reserved.
_align16_zero_memory proc C _byte_num, _source
option prologue:none, epilogue:none
mov eax, [esp+4] ; - U load _byte_num
push edi ; - V save old frame
mov edi, [esp+12] ; - U load _source
push ecx ; - V save old frame
mov ecx, eax ; - U save old frame
nop ; - V spare
shr eax, 7 ; - U get round
je _remain_byte_deal ; - V/N deal remain frame
pxor xmm0, xmm0 ; get zero
align 16
main_loop:
movdqa [edi], xmm0
movdqa [edi+010h], xmm0
movdqa [edi+020h], xmm0
movdqa [edi+030h], xmm0
movdqa [edi+040h], xmm0
movdqa [edi+050h], xmm0
movdqa [edi+060h], xmm0
movdqa [edi+070h], xmm0
add edi, 128
nop
dec eax
jnz main_loop ; jnz opr ... maybe unsafe ...
mov eax, ecx ; - U save old frame
and ecx, 112 ; - V/N 0x0111 0000
shr ecx, 3 ; - U 0x0000 1110 0/2/4/6/
align 16 ; - V/N maybe jmp opcode/nop opcode
_remain_byte_deal:
pxor xmm0, xmm0 ; get zero
lea edi, [edi-070h+ecx*8] ; - N
jmp [RemainDQwordTable+ecx*4] ; - N
align 16
SB0E:
SB0F:
movdqa [edi], xmm0
SB0C:
SB0D:
movdqa [edi+010h], xmm0
SB0A:
SB0B:
movdqa [edi+020h], xmm0
SB08:
SB09:
movdqa [edi+030h], xmm0
SB06:
SB07:
movdqa [edi+040h], xmm0
SB04:
SB05:
movdqa [edi+050h], xmm0
SB02:
SB03:
movdqa [edi+060h], xmm0
SB00:
SB01:
neg ecx
and eax, 15
lea edi, [edi+070h+ecx*8]
mov ecx, eax
xor eax, eax
cld
rep stosb
pop ecx
pop edi
ret
RemainDQwordTable dd SB00, SB01, SB02, SB03, SB04, SB05, SB06, SB07
dd SB08, SB09, SB0A, SB0B, SB0C, SB0D, SB0E, SB0F
_align16_zero_memory endp
SetUpZeroMem proc C _byte_num, _source
option prologue:none, epilogue:none
mov eax, [esp+8] ; - U load source
push edi ; - V save old frame
mov edi, eax ; - U
push ecx ; - V save old frame
mov ecx, [esp+12] ; - U load num
nop ; - V spare
cmp ecx, 16
jb __miniature_copy
and eax, 15 ; - U
jmp [eax*4+_ByteTable]
align 16
OP00:
push edi
push ecx
call _align16_zero_memory
add esp, 8
pop ecx
pop edi
ret
OP01: ; 0000 0001
mov byte ptr [edi], 0
mov word ptr [edi+1], 0
mov dword ptr [edi+3], 0
mov dword ptr [edi+7], 0
mov dword ptr [edi+11], 0
add edi, 15
sub ecx, 15
jmp OP00
OP02: ; 0000 0002
mov word ptr [edi], 0
mov dword ptr [edi+2], 0
mov dword ptr [edi+6], 0
mov dword ptr [edi+10], 0
add edi, 14
sub ecx, 14
jmp OP00
OP03: ; 0000 0003
mov byte ptr [edi], 0
mov dword ptr [edi+1], 0
mov dword ptr [edi+5], 0
mov dword ptr [edi+9], 0
add edi, 13
sub ecx, 13
jmp OP00
OP04: ; 0000 0004
mov dword ptr [edi], 0
mov dword ptr [edi+4], 0
mov dword ptr [edi+8], 0
add edi, 12
sub ecx, 12
jmp OP00
OP05: ; 0000 0005
mov byte ptr [edi], 0
mov word ptr [edi+1], 0
mov dword ptr [edi+3], 0
mov dword ptr [edi+7], 0
add edi, 11
sub ecx, 11
jmp OP00
OP06: ; 0000 0006
mov word ptr [edi], 0
mov dword ptr [edi+2], 0
mov dword ptr [edi+6], 0
add edi, 10
sub ecx, 10
jmp OP00
OP07: ; 0000 0007
mov byte ptr [edi], 0
mov dword ptr [edi+1], 0
mov dword ptr [edi+5], 0
add edi, 9
sub ecx, 9
jmp OP00
OP08:
mov dword ptr [edi], 0
mov dword ptr [edi+8], 0
sub ecx, 8
add edi, 8
jmp OP00
OP09:
mov byte ptr [edi], 0
mov word ptr [edi+1], 0
mov dword ptr [edi+3], 0
sub ecx, 7
add edi, 7
jmp OP00
OP0A:
mov word ptr [edi], 0
mov dword ptr [edi+2], 0
sub ecx, 6
add edi, 6
jmp OP00
OP0B:
mov byte ptr [edi], 0
mov dword ptr [edi+1], 0
sub ecx, 5
add edi, 5
jmp OP00
OP0C:
mov dword ptr [edi], 0
sub ecx, 4
add edi, 4
jmp OP00
OP0D:
mov byte ptr [edi], 0
mov word ptr [edi+2], 0
sub ecx, 3
add edi, 3
jmp OP00
OP0E:
mov word ptr [edi], 0
sub ecx, 2
add edi, 2
jmp OP00
OP0F:
mov byte ptr [edi], 0
dec ecx
inc edi
jmp OP00
__miniature_copy:
cld
xor eax, eax
rep stosb ; rep maybe rubbish
pop ecx
pop edi
ret
_ByteTable dd OP00, OP01, OP02, OP03, OP04, OP05, OP06, OP07
dd OP08, OP09, OP0A, OP0B, OP0C, OP0D, OP0E, OP0F
SetUpZeroMem endp
end
分享到:
相关推荐
使用C/C++编程时,常使用ZeroMemory、memset或 “={0}”来对结构体对象进行初始化或清零。然而这三种方式都有各自的特点,使用时需谨慎,否则容易出现严重错误,本人解决一个导致宕机的bug,查了几小时,才发现是由...
。。。
。。。
本文简述了基于VC++实现的调用系统时间的简单示例,这里只列出主要部分代码,供大家参考一下,具体如下: 首先要注意添加头文件: #include 然后就简单了,这里只粘出主要用法如下: #ifdef _SECURITY ...
操作系统的实验题目
// ZeroMemory(&ofn,sizeof(ofn)); // ofn.lStructSize = sizeof(ofn); // ofn.lpstrFile = szFile; // ofn.lpstrFile[0] = TEXT('/0'); // ofn.nMaxFile = sizeof(szFile); // ofn.lpstrFilter = TEXT("all/0*...
ZeroMemory ( &ComState ,sizeof(ComState) ); ZeroMemory ( &OvLap ,sizeof(OvLap) ); OvLap.Offset = 0; OvLap.OffsetHigh = 0; OvLap.hEvent = CreateEvent (NULL,TRUE,FALSE,NULL); //Clear All ...
ZeroMemory(&mxc, sizeof(mxc)); mxc.cbStruct = sizeof(mxc); rc = mixerGetLineControls((HMIXEROBJ)hMixer,&mxlc, MIXER_GETLINECONTROLSF_ONEBYTYPE); if (MMSYSERR_NOERROR != rc) { // Couldn‘t get the ...
所以在Windows 9x/NT里是无法通过Winsock函数库来实现IP头自定义的,当然可以通过编写虚拟设备驱动程序来实现,不过比较复杂,但Windows 2000的出现打破了这种局面,Windows2000的Winsock2.2函数库里全面支持...
易语言插件感染源码,插件感染,GetDword,SetDword,SetWord,GetbyteAddress,GetTextAddress,CopyMemory,ZeroMemory
LPDIRECTDRAW7 lpDD;...ZeroMemory( &ddsd, sizeof( ddsd ) ); ZeroMemory( &ddscaps, sizeof( ddscaps ) ); 这两个语句使ddsd和ddscaps中的变量都为零,如果不这样做下面的CreateSurface会不成功。
查询了有关资料文档以后,发现Windows 9x和Windows NT4.0 没有提供API或系统调用来实现这样的功能。但是,在Windows 2000中提供了一个新的函数:GetLastInputInfo(),这个函数使用结构 LASTINPUTINFO 作为参数: ...
1.支持连接SQL,MYSQL、ACCESS ... ::ZeroMemory(this,sizeof(DBPARA)); nDriverType = driverSQLServer; nTimeOut = 60000;} }DbPara; 3.可调用增删查改,存储过程 4.调用存储过程可返回结果
注入dll到微信 0x0 首先要打开微信进程 wchar_t wxPath[] = LC:\\Program Files (x86)\\Tencent\\WeChat\\...ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi)); si.dwFlags = STARTF_U
MD5 加密 源代码 procedure MD5Final(var Context: MD5Context; var Digest: MD5Digest); var Bits: MD5CBits; Index: longword; PadLen: longword;... ZeroMemory(@Context, SizeOf(MD5Context)); end;
function GBCht2Chs(GBStr: ...ZeroMemory(pGBCHSChar, Len * 2 + 1); //GB CHS -> GB CHT LCMapString($804, LCMAP_SIMPLIFIED_CHINESE, pGBCHTChar, -1, pGBCHSChar, Len * 2); result := string(pGBCHSChar);
[+]Added New Features For DLLs (ZeroMemory/UnmapMemory) [+]Added Unicode/Ascii String Reference In Disassembler Window [+]Added Physical Memory Dumper [+]Added Thread Stack Trace [+]Added "Copy" and ...
::ZeroMemory(&lvcprev, sizeof(lvcprev)); lvc.mask = LVCF_WIDTH | LVCF_FMT; lvcprev.mask = LVCF_WIDTH | LVCF_FMT; CDC* pDC; pDC = CDC::FromHandle(lpDrawItemStruct->hDC); CRect rtClient; ...
利用socket编写windows和linux通讯程序(源代码实现) <br> socket编程大家都很熟悉,我在这里就不再罗嗦了。直接切入正题。该程序分两部分,server端和client端(谁都知道)。其中server端采用windows平台,那...
ZeroMemory ( &psp, sizeof(PROPSHEETPAGE) ); psp.dwSize = sizeof(PROPSHEETPAGE); psp.dwFlags = PSP_USEREFPARENT | PSP_DEFAULT | PSP_USECALLBACK; psp.hInstance = _Module.GetResourceInstance(); psp...