论坛: 编程破解 标题: 在C#中使用指针的问题 复制本贴地址    
作者: ghame [ghame]    论坛用户   登录
我想用C#编一个查看PE文件头的程序,关键代码如下:
[StructLayout(LayoutKind.Explicit)]
public struct DosMZ   
{
    [FieldOffset(0)]public ushort e_magic;
    .......
}
以上为DOSMZ头的定义。
我在下文中用这个结构的指针:
FileStream fs=new FileStream(....);
byte[] buffer=new byte[64];  //DosMZ头的长度为64
fs.read(buffer,0,64);
fixed (byte* pbuffer=buffer)
{
    DosMZ* pdosh=(DosMZ*)pbuffer;  //编译器在此处报错
    .......
}
编译器报错:“不能获取DosMZ结构的大小或地址”
请问,到底是哪里出了问题?



[此贴被 ghame(ghame) 在 03月06日01时18分 编辑过]

地主 发表时间: 04-03-05 20:52

回复: flavor [flavor]   论坛用户   登录
C#有指针吗?

看来我孤陋寡闻啦!

B1层 发表时间: 04-03-05 21:51

回复: flavor [flavor]   论坛用户   登录
楼主不是cp了C的查看PE文件的代码吧!呵呵

具我所掌握的C#的知识,暂时还没办法用C#实现查看PE文件。呵呵。

毕竟.net framewrok不是基于win32的。

B2层 发表时间: 04-03-05 21:55

回复: ghame [ghame]   论坛用户   登录
呵呵.可以的..NET中有一种叫做非托管代码的东西,也就是指内存不受托管的代码.其中C++.NET就属于非托管代码.而VB.NET,C#.NET的代码属于托管代码.
托管代码和非托管代码之间是可以互相通信的.但是要在托管代码中使用非托管代码,必须在这一段代码加上unsafe关键字.在unsafe的上下文是可以使用指针的.


B3层 发表时间: 04-03-06 00:36

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号