Advertisement
Guest User

Untitled

a guest
Apr 27th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. include x32PE.inc
  2. .XMM
  3.  
  4. ;==========IMPORT===============
  5. extern VirtualAlloc :proc
  6. extern VirtualFree  :proc
  7. ;==========INCLUDES=============
  8.  
  9. ;==========LIBS=================
  10. includelib kernel32.dll
  11. ;===============================
  12.  
  13. MEM_COMMIT equ 00001000h
  14. MEM_RESERVE equ 00002000h
  15. MEM_RESET equ 00080000h
  16. MEM_RESET_UNDO equ 1000000h
  17.  
  18. MEM_LARGE_PAGES equ 20000000h
  19. MEM_PHYSICAL equ 00400000h
  20. MEM_TOP_DOWN equ 00100000h
  21. MEM_WRITE_WATCH equ 00200000h
  22.  
  23. PAGE_READWRITE equ 04h
  24.  
  25. MEM_RELEASE equ 8000h
  26.  
  27. PLinkedList typedef ptr LinkedList
  28. LinkedList struct
  29.   Data DWORD ?
  30.   Next PLinkedList ?
  31. LinkedList ends
  32.  
  33. .data
  34. array dd 10000 dup (?)
  35.  
  36. .code
  37.  
  38. align 4
  39. Entry proc
  40.     push lengthof array
  41.     push offset array
  42.     call FillerRandom
  43.    
  44.     rdtsc
  45.     xor edx, eax
  46.    
  47.     push edx
  48.     call create
  49.    
  50.     mov edi, eax
  51.    
  52.     rdtsc
  53.     xor edx, eax
  54.     push edx
  55.     push edi
  56.     call addL
  57.    
  58.     rdtsc
  59.     xor edx, eax
  60.     push edx
  61.     push edi
  62.     call addL
  63.    
  64.     push 1
  65.     push edi
  66.     call get
  67.    
  68.     push 1
  69.     push edi
  70.     call remove
  71.    
  72.     push 1
  73.     push edi
  74.     call get
  75.    
  76.     ret
  77. Entry endp
  78.  
  79. toList proc stdcall
  80. toList endp
  81.  
  82. addL proc stdcall uses ebx edi AddrList:PLinkedList, Data:DWORD
  83.     mov ebx, dword ptr [AddrList]
  84.   nextNode:
  85.     mov edi, ebx
  86.     mov ebx, dword ptr [ebx + LinkedList.Next] 
  87.     test ebx, ebx
  88.     jne nextNode
  89.    
  90.     push PAGE_READWRITE
  91.     push MEM_COMMIT or MEM_RESERVE
  92.     push sizeof LinkedList
  93.     push 0
  94.     call VirtualAlloc
  95.    
  96.     test eax,eax
  97.     jne goodAddL
  98.     mov eax, -1
  99.     jmp exAddL
  100.    
  101.   goodAddL:
  102.     mov dword ptr[edi + LinkedList.Next], eax  
  103.     mov edi, dword ptr[Data]
  104.     mov dword ptr[eax + LinkedList.Data], edi
  105.  
  106.   exAddL:
  107.     ret
  108. addL endp
  109.  
  110. remove proc stdcall uses ebx edi ecx esi AddrList:PLinkedList, Index:DWORD
  111.     mov ebx, dword ptr [AddrList]
  112.     xor esi,esi
  113.   nextNode:
  114.     cmp esi, dword ptr[Index]
  115.     je foundRem ;если нашли   
  116.     inc esi
  117.     mov edi, ebx ; сохраняем предыдуший адрес
  118.     mov ebx, dword ptr [ebx + LinkedList.Next] ;если не нашли идем к след узлу
  119.    
  120.     test ebx, ebx
  121.     jne nextNode ;идем к след узлу
  122.     mov eax, -1
  123.     jmp exRem ;если дошли до последней
  124.   foundRem:
  125.     mov ecx, dword ptr[ebx + LinkedList.Next] ;сохраняем следующий адрес
  126.     mov dword ptr[edi + LinkedList.Next], ecx
  127.     ;удаляем текущий
  128.    
  129.     push MEM_RELEASE
  130.     push 0
  131.     push ebx
  132.     call VirtualFree
  133.    
  134.     test eax,eax
  135.     jne exRem
  136.     mov eax, -1
  137.    
  138.   exRem:   
  139.     ret
  140. remove endp
  141.  
  142. get proc stdcall uses ebx edi AddrList:PLinkedList, Index:DWORD
  143.     mov ebx, dword ptr [AddrList]
  144.     xor edi,edi
  145.   nextNode:
  146.     cmp edi, dword ptr[Index]
  147.     je found ;если нашли
  148.     inc edi
  149.     mov ebx, dword ptr [ebx + LinkedList.Next] ;если не нашли идем к след узлу
  150.     test ebx, ebx
  151.     jne nextNode ;идем к след узлу
  152.    
  153.     mov eax, -1
  154.     jmp exGet ;если дошли до последней
  155.  
  156.   found:
  157.     mov eax, dword ptr[ebx + LinkedList.Data]
  158.    
  159.   exGet:
  160.     ret
  161. get endp
  162.  
  163. create proc stdcall uses edi Data:DWORD
  164.     push PAGE_READWRITE
  165.     push MEM_COMMIT or MEM_RESERVE
  166.     push sizeof LinkedList
  167.     push 0
  168.     call VirtualAlloc
  169.    
  170.     test eax,eax
  171.     jne good
  172.     mov eax, -1
  173.     jmp ex
  174.    
  175.   good:
  176.     mov edi, dword ptr[Data]
  177.     mov dword ptr[eax + LinkedList.Data], edi
  178.   ex:
  179.     ret
  180. create endp
  181.  
  182. FillerRandom proc stdcall uses ebx edi ecx edx Array:DWORD, ArrayLength:DWORD
  183.     mov ebx, dword ptr [Array]
  184.     xor edi, edi
  185.     mov ecx, ArrayLength
  186.   nextItem:
  187.     rdtsc
  188.     xor edx,eax
  189.     mov dword ptr [ebx + edi * 4], edx
  190.     inc edi
  191.     loop nextItem
  192.     ;mov eax, ArrayLength   ;просто делал ссылку на последний элемент в массиве для дебаггера
  193.     ;lea eax, dword ptr [ebx + eax * 4] ;просто делал ссылку на последний элемент в массиве для дебаггера
  194.     ret
  195. FillerRandom endp
  196. end Entry
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement