39 lines
1.1 KiB
Plaintext
39 lines
1.1 KiB
Plaintext
Procedure MachineCodeVirtualAlloc(a,b)
|
|
*vm = VirtualAlloc_(#Null,?ecode-?scode,#MEM_COMMIT,#PAGE_EXECUTE_READWRITE)
|
|
If(*vm)
|
|
CopyMemory_(*vm,?scode,?ecode-?scode)
|
|
eax_result=CallFunctionFast(*vm,a,b)
|
|
VirtualFree_(*vm,0,#MEM_RELEASE)
|
|
ProcedureReturn eax_result
|
|
EndIf
|
|
EndProcedure
|
|
|
|
rv=MachineCodeVirtualAlloc(7,12)
|
|
MessageRequester("MachineCodeVirtualAlloc",str(rv)+space(50),#PB_MessageRequester_Ok)
|
|
|
|
#HEAP_CREATE_ENABLE_EXECUTE=$00040000
|
|
|
|
Procedure MachineCodeHeapCreate(a,b)
|
|
hHeap=HeapCreate_(#HEAP_CREATE_ENABLE_EXECUTE,?ecode-?scode,?ecode-?scode)
|
|
If(hHeap)
|
|
CopyMemory_(hHeap,?scode,?ecode-?scode)
|
|
eax_result=CallFunctionFast(hHeap,a,b)
|
|
HeapDestroy_(hHeap)
|
|
ProcedureReturn eax_result
|
|
EndIf
|
|
EndProcedure
|
|
|
|
rv=MachineCodeHeapCreate(7,12)
|
|
MessageRequester("MachineCodeHeapCreate",str(rv)+space(50),#PB_MessageRequester_Ok)
|
|
End
|
|
|
|
; 8B442404 mov eax,[esp+4]
|
|
; 03442408 add eax,[esp+8]
|
|
; C20800 ret 8
|
|
|
|
DataSection
|
|
scode:
|
|
Data.c $8B,$44,$24,$04,$03,$44,$24,$08,$C2,$08,$00
|
|
ecode:
|
|
EndDataSection
|