本文整理汇总了C#中Reko.Core.MemoryArea.CreateImageMap方法的典型用法代码示例。如果您正苦于以下问题:C# MemoryArea.CreateImageMap方法的具体用法?C# MemoryArea.CreateImageMap怎么用?C# MemoryArea.CreateImageMap使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Reko.Core.MemoryArea
的用法示例。
在下文中一共展示了MemoryArea.CreateImageMap方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Unpack
public MemoryArea Unpack(byte [] abC, Address addrLoad)
{
// Extract the LZ stuff.
ImageReader rdr = new LeImageReader(abC, (uint) lzHdrOffset);
lzIp = rdr.ReadLeUInt16();
lzCs = rdr.ReadLeUInt16();
ushort lzSp = rdr.ReadLeUInt16();
ushort lzSs = rdr.ReadLeUInt16();
ushort lzcpCompressed = rdr.ReadLeUInt16();
ushort lzcpDecompressed = rdr.ReadLeUInt16();
// Find the start of the compressed stream.
int ifile = lzHdrOffset - (lzcpCompressed << 4);
// Allocate space for the decompressed goo.
int cbUncompressed = ((int) lzcpDecompressed + lzcpDecompressed) << 4;
byte [] abU = new byte[cbUncompressed];
// Decompress this sorry mess.
int len;
int span;
int p = 0;
BitStream bits = new BitStream(abC, ifile);
for (;;)
{
if (bits.GetBit() != 0)
{
// 1....
abU[p++] = bits.GetByte();
continue;
}
if (bits.GetBit() == 0)
{
// 00.....
len = bits.GetBit() << 1;
len |= bits.GetBit();
len += 2;
span = bits.GetByte() | ~0xFF;
}
else
{
// 01.....
span = bits.GetByte();
len = bits.GetByte();;
span |= ((len & ~0x07)<<5) | ~0x1FFF;
len = (len & 0x07) + 2;
if (len == 2)
{
len = bits.GetByte();
if (len == 0)
break; // end mark of compressed load module
if (len == 1)
continue; // segment change
else
++len;
}
}
for( ;len > 0; --len, ++p)
{
abU[p] = abU[p+span];
}
}
// Create a new image based on the uncompressed data.
this.imgLoaded = new MemoryArea(addrLoad, abU);
this.segmentMap = imgLoaded.CreateImageMap();
return imgLoaded;
}