我正在尝试用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);
}
答案 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;
}