コード例 #1
0
ファイル: Injection.cs プロジェクト: WildGenie/uoaioldsvn
        //perform unmanaged call
        public static uint Call(uint tocall, uint[] stack, uint thispar)
        {
            uint toreturn = 0;

            UnmanagedBuffer stackbuffer = new UnmanagedBuffer((uint)stack.Length * 4);

            for (uint i = 0; i < stack.Length; i++)//write reversed stack array
            {
                stackbuffer.WriteAt <uint>(stack[stack.Length - 1 - i], i * 4);
            }
            m_Parameters.WriteAt <uint>(tocall, data_alignment + 0 * 4);
            m_Parameters.WriteAt <uint>((uint)stack.Length, data_alignment + 1 * 4);
            m_Parameters.WriteAt <uint>((uint)stackbuffer.Address, data_alignment + 2 * 4);
            m_Parameters.WriteAt <uint>(thispar, data_alignment + 3 * 4);

            m_Call.DynamicInvoke(new object[] { });

            toreturn = m_Parameters.ReadAt <uint>(data_alignment + 4 * 4);

            stackbuffer.Free();

            return(toreturn);
        }