Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- include x32PE.inc
- .XMM
- ;==========IMPORT===============
- extern VirtualAlloc :proc
- extern VirtualFree :proc
- ;==========INCLUDES=============
- ;==========LIBS=================
- includelib kernel32.dll
- ;===============================
- MEM_COMMIT equ 00001000h
- MEM_RESERVE equ 00002000h
- MEM_RESET equ 00080000h
- MEM_RESET_UNDO equ 1000000h
- MEM_LARGE_PAGES equ 20000000h
- MEM_PHYSICAL equ 00400000h
- MEM_TOP_DOWN equ 00100000h
- MEM_WRITE_WATCH equ 00200000h
- PAGE_READWRITE equ 04h
- MEM_RELEASE equ 8000h
- PLinkedList typedef ptr LinkedList
- LinkedList struct
- Data DWORD ?
- Next PLinkedList ?
- LinkedList ends
- .data
- array dd 10000 dup (?)
- .code
- align 4
- Entry proc
- push lengthof array
- push offset array
- call FillerRandom
- rdtsc
- xor edx, eax
- push edx
- call create
- mov edi, eax
- rdtsc
- xor edx, eax
- push edx
- push edi
- call addL
- rdtsc
- xor edx, eax
- push edx
- push edi
- call addL
- push 1
- push edi
- call get
- push 1
- push edi
- call remove
- push 1
- push edi
- call get
- ret
- Entry endp
- toList proc stdcall
- toList endp
- addL proc stdcall uses ebx edi AddrList:PLinkedList, Data:DWORD
- mov ebx, dword ptr [AddrList]
- nextNode:
- mov edi, ebx
- mov ebx, dword ptr [ebx + LinkedList.Next]
- test ebx, ebx
- jne nextNode
- push PAGE_READWRITE
- push MEM_COMMIT or MEM_RESERVE
- push sizeof LinkedList
- push 0
- call VirtualAlloc
- test eax,eax
- jne goodAddL
- mov eax, -1
- jmp exAddL
- goodAddL:
- mov dword ptr[edi + LinkedList.Next], eax
- mov edi, dword ptr[Data]
- mov dword ptr[eax + LinkedList.Data], edi
- exAddL:
- ret
- addL endp
- remove proc stdcall uses ebx edi ecx esi AddrList:PLinkedList, Index:DWORD
- mov ebx, dword ptr [AddrList]
- xor esi,esi
- nextNode:
- cmp esi, dword ptr[Index]
- je foundRem ;если нашли
- inc esi
- mov edi, ebx ; сохраняем предыдуший адрес
- mov ebx, dword ptr [ebx + LinkedList.Next] ;если не нашли идем к след узлу
- test ebx, ebx
- jne nextNode ;идем к след узлу
- mov eax, -1
- jmp exRem ;если дошли до последней
- foundRem:
- mov ecx, dword ptr[ebx + LinkedList.Next] ;сохраняем следующий адрес
- mov dword ptr[edi + LinkedList.Next], ecx
- ;удаляем текущий
- push MEM_RELEASE
- push 0
- push ebx
- call VirtualFree
- test eax,eax
- jne exRem
- mov eax, -1
- exRem:
- ret
- remove endp
- get proc stdcall uses ebx edi AddrList:PLinkedList, Index:DWORD
- mov ebx, dword ptr [AddrList]
- xor edi,edi
- nextNode:
- cmp edi, dword ptr[Index]
- je found ;если нашли
- inc edi
- mov ebx, dword ptr [ebx + LinkedList.Next] ;если не нашли идем к след узлу
- test ebx, ebx
- jne nextNode ;идем к след узлу
- mov eax, -1
- jmp exGet ;если дошли до последней
- found:
- mov eax, dword ptr[ebx + LinkedList.Data]
- exGet:
- ret
- get endp
- create proc stdcall uses edi Data:DWORD
- push PAGE_READWRITE
- push MEM_COMMIT or MEM_RESERVE
- push sizeof LinkedList
- push 0
- call VirtualAlloc
- test eax,eax
- jne good
- mov eax, -1
- jmp ex
- good:
- mov edi, dword ptr[Data]
- mov dword ptr[eax + LinkedList.Data], edi
- ex:
- ret
- create endp
- FillerRandom proc stdcall uses ebx edi ecx edx Array:DWORD, ArrayLength:DWORD
- mov ebx, dword ptr [Array]
- xor edi, edi
- mov ecx, ArrayLength
- nextItem:
- rdtsc
- xor edx,eax
- mov dword ptr [ebx + edi * 4], edx
- inc edi
- loop nextItem
- ;mov eax, ArrayLength ;просто делал ссылку на последний элемент в массиве для дебаггера
- ;lea eax, dword ptr [ebx + eax * 4] ;просто делал ссылку на последний элемент в массиве для дебаггера
- ret
- FillerRandom endp
- end Entry
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement