获取对象的类型,然后投射它?

时间:2013-07-06 15:39:45

标签: c# unsafe

我正在尝试用C#做一点“memcpy”黑客攻击。我一直卡在这一部分,因为它不会将System.Type转换为byte *

    public unsafe void memcpy(byte* dest, object src, int length)
    {
        byte* nsrc;
        byte* ndst;
        nsrc = (byte*)((src.GetType())src);

    }

如您所见,我尝试获取对象的类型,然后将其强制转换为原始对象。

有什么想法吗?

更新

也许使用序列化?

    private byte[] ObjectToByteArray(Object obj)
    {
        if(obj == null)
            return null;
        BinaryFormatter bf = new BinaryFormatter();
        MemoryStream ms = new MemoryStream();
        bf.Serialize(ms, obj);
        return ms.ToArray();
    }

    private void memcpy(byte[] dest, int pos, object src, int len)
    {
        byte[] ba = ObjectToByteArray(src);
        Array.Copy(ObjectToByteArray(src), 0, dest, pos, len);
    }

2 个答案:

答案 0 :(得分:3)

不清楚你想要什么,但也许这有用吗?

int yourInt32 = ...;
byte[] bitsFromInt32Value = BitConverter.GetBytes(yourInt32);

long yourInt64 = ...;
byte[] bitsFromInt64Value = BitConverter.GetBytes(yourInt64);

答案 1 :(得分:0)

取自msdn:

  

指针类型不从对象继承,也不存在转换   指针类型和对象之间。此外,装箱和拆箱不会   支持指针。但是,您可以在不同指针之间进行转换   类型以及指针类型和整数类型之间。

链接:http://msdn.microsoft.com/en-us/library/y31yhkeb(v=vs.100).aspx

            int number = 200;

            unsafe
            {
                // Convert to byte:
                byte* p = (byte*)&number;
            }