首页
社区
课程
招聘
[原创]甩两个很菜的汇编代码
发表于: 2011-12-12 18:08 4073

[原创]甩两个很菜的汇编代码

2011-12-12 18:08
4073
3种排序算法插入排序
Insert proc pChar:BYTE
    pushad
    xor ebx,ebx
    xor ecx,ecx
    xor edi,edi
    xor esi,esi
    xor edx,edx
    mov eax,[ebp+8]
    push eax
@l1:
    mov bl,[eax]
    cmp bl,0h
    je @tl
    inc ecx
    inc eax
    jmp @l1
@tl:
    pop eax
@l2:
    inc ebx
    cmp ebx,ecx
    jge @l5
    mov dl,[eax+ebx]
    mov esi,ebx
    dec esi
@l3:
    cmp [eax+esi],dl
    jle @l4
    push ebx
    mov bl,[eax+esi]
    mov [eax+esi+1],bl
    dec esi
    pop ebx
    jmp @l3
@l4:
    mov [eax+esi+1],dl
    jmp @l2 
@l5:
    popad
    ret
Insert endp

选择排序
Choose proc pChar:BYTE
    pushad
    xor eax,eax
    xor ebx,ebx
    xor ecx,ecx
    xor edx,edx
    xor edi,edi
    xor esi,esi
    mov eax,[ebp+8]
    push eax
@l1:
    mov bl,[eax]
    cmp bl,0h
    je @tl1
    inc eax
    inc ecx
    jmp @l1
@tl1:
    pop eax
@l2:
    cmp edx,ecx
    jge @exit
    mov esi,edx
    mov edi,edx
    
@ll1:
    inc edi
    cmp edi,ecx
    jge @l3
    mov bl,[eax+esi]
    cmp [eax+edi],bl
    jge @ll
    xchg edi,esi
    inc edi
@ll:
    jmp @ll1
@l3:
    cmp esi,edx
    je @l4
    push ebx
    mov bl,[eax+edx]
    mov bh,[eax+esi]
    mov [eax+edx],bh
    mov [eax+esi],bl
    pop ebx
@l4:
    inc edx
    jmp @l2
@exit:
    popad
    ret
Choose endp

冒泡排序
Bubble proc pChar:BYTE
    pushad
    xor eax,eax
    xor ebx,ebx
    xor ecx,ecx
    xor edx,edx
    xor edi,edi
    xor esi,esi
    mov eax,[ebp+8]
    push eax
@l1:
    mov bl,[eax]
    cmp bl,0h
    je @tl1
    inc eax
    inc ecx
    jmp @l1
@tl1:
    pop eax
    dec ecx
@l2:
    cmp edx,ecx
    jge @exit
    xor esi,esi
    xor edi,edi
@l3:
    push ebx
    mov ebx,ecx
    sub ebx,edx
    cmp edi,ebx
    pop ebx
    jge @l5
    mov bl,[eax+edi+1]
    cmp bl,[eax+edi]
    jge @l4
    mov bh,[eax+edi]
    mov [eax+edi+1],bh
    mov [eax+edi],bl
    mov esi,1h
@l4:
    inc edi
    jmp @l3
@l5:
    cmp esi,0h
    jne @l6
    jmp @exit
@l6:
    inc edx
    jmp @l2
@exit:
    popad
    ret
Bubble endp
END START

用法示范:
.386
.Model Flat, StdCall
Option Casemap :None

Include windows.inc
Include user32.inc
Include kernel32.inc
Include gdi32.inc

includelib gdi32.lib
IncludeLib user32.lib
IncludeLib kernel32.lib
include macro.asm
.DATA
	lpMsg db "Example",0
.CODE
START:
    push 0
    call GetModuleHandle
    lea eax,lpMsg
    push eax
    call Bubble
    ;call Insert
    push 0
    lea eax,lpMsg
    push eax
    lea eax,lpMsg
    push eax
    push 0
    call MessageBox
    push 0
    call ExitProcess

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 278
活跃值: (709)
能力值: ( LV15,RANK:520 )
在线值:
发帖
回帖
粉丝
2
测试代码
	GetHashAddr(0xBE3AB850);
	GetHashAddr(0x1E40F0);

UINT GetHashAddr(UINT Value)
{
_asm{
        mov  eax, fs:[30h]
        mov  eax, [eax+0ch]
        mov  eax, [eax+0ch]
        mov  eax, [eax]
		mov  eax, [eax]
        mov  eax, [eax+18h]
		cmp  word ptr[eax],0x5a4d
		je @next
        MOV EAX,DWORD PTR FS:[0]   ;忘了引用的哪位大侠的代码了
L001:
        CMP DWORD PTR DS:[EAX],-1
        JE L006
        MOV EAX,DWORD PTR DS:[EAX]
        MOV DWORD PTR FS:[0],EAX
        JMP L001
L006:
        MOV EAX,DWORD PTR DS:[EAX+8]
        MOV EAX,DWORD PTR DS:[EAX+8]
        ADD EAX,13
        JMP EAX     ;忘了引用的哪位大侠的代码了
@next:  
		mov ebx,eax           ;;;;;;;Dos Header
		mov ebx,[ebx+0x3c]
		add ebx,eax           ;;;;;;;PE Header
		add ebx,24            ;;;;;;;Opt Header
		add ebx,0x60          
		mov ebx,[ebx]         ;;;;;;;Export Table Address
		add ebx,eax           ;;;;;;;export address table
		mov esi,[ebx+0x1C]    ;;;;;;;function addr
		add esi,eax
		mov edi,[ebx+0x20]    ;;;;;;;Name Address
		add edi,eax
		mov edx,[ebx+0x24]    ;;;;;;;Name Address Serial Table 
		add edx,eax
		mov ecx,[ebx+0x18]    ;;;;;;;Name Size
		xor ebx,ebx
		sub esp,20
		mov [ebp-4],ecx
@keep:
		push esi
		mov si,[edx+ebx*2]
		mov [ebp-8],si
		pop esi
		mov cx,[edi+ebx*4]
		add ecx,eax
		push esi
		xor esi,esi
@L1:
		cmp byte ptr[esi+ecx],0x00  ;;Get
		je  @L2                     ;;Function
		inc esi                     ;;Name
		jmp @L1                     ;;Length
@L2:
		push edi
		push eax
		xor edi,edi
		xor eax,eax
@L3:
		add al,byte ptr[ecx+edi]    ;;cmp length
		shl eax,2                   ;;hash Function
		cmp edi,esi                 ;;Name Len
		je @L4                      ;;Get
		inc edi                     ;;One
		jmp @L3                     ;;Hash Value
@L4:
		mov ecx,eax
		cmp ecx,[ebp+8]              ;;Comp Hash Value
		je @L6
		xor ecx,ecx
		pop eax                     ;;;Pop Stack Value
		pop edi                     ;;;Pop Stack Value
		pop esi                     ;;;Pop Stack Value
		inc ebx                     
		cmp ebx,[ebp-4]             ;;;cmp Funcname size
		jne @keep                   ;;;cmp is keep
@L6:
		pop eax                     ;;;exit loop
		pop edi
		pop esi
		xor ecx,ecx
		mov cx,[ebp-8]
		mov ebx,[esi+ecx*4]         ;;;Number by name to obtain the offset address in memory
		add eax,ebx
	}
2011-12-12 18:09
0
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
。。。基础重要。    自己不要的东西,有可能是别人的宝藏,
2011-12-12 18:47
0
雪    币: 12
活跃值: (767)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
膜拜,不错1234
2011-12-12 21:02
0
游客
登录 | 注册 方可回帖
返回
//