Example #1
0
		public void ImageMapCreation()
		{
			ImageMap im = new ImageMap(addrBase, img.Length);

			im.AddSegment(Address.SegPtr(0x8000, 2), "",  AccessMode.ReadWrite);
			im.AddSegment(Address.SegPtr(0x8000, 3), "", AccessMode.ReadWrite);
			im.AddSegment(Address.SegPtr(0x8000, 0), "", AccessMode.ReadWrite);

			// Verify

			IEnumerator<KeyValuePair<Address,ImageMapSegment>> e = im.Segments.GetEnumerator();
			Assert.IsTrue(e.MoveNext());
			ImageMapSegment seg = e.Current.Value;
			Assert.AreEqual(2, seg.Size);

			Assert.IsTrue(e.MoveNext());
            seg = e.Current.Value;
			Assert.AreEqual(1, seg.Size);
			
			Assert.IsTrue(e.MoveNext());
			seg = e.Current.Value;
			Assert.AreEqual(1, seg.Size);

			Assert.IsTrue(!e.MoveNext());
		}
Example #2
0
        public override Program Load(Address addrLoad)
        {
            BinHexDecoder dec = new BinHexDecoder(new StringReader(Encoding.ASCII.GetString(RawImage)));
            IEnumerator<byte> stm = dec.GetBytes().GetEnumerator();
            BinHexHeader hdr = LoadBinHexHeader(stm);
            byte[] dataFork = LoadFork(hdr.DataForkLength, stm);
            byte[] rsrcFork = LoadFork(hdr.ResourceForkLength, stm);

            var arch = new M68kArchitecture();
            var platform = new MacOSClassic(Services, arch);
            if (hdr.FileType == "PACT")
            {
                Cpt.CompactProArchive archive = new Cpt.CompactProArchive();
                List<ArchiveDirectoryEntry> items = archive.Load(new MemoryStream(dataFork));
                IArchiveBrowserService abSvc = Services.GetService<IArchiveBrowserService>();
                if (abSvc != null)
                {
                    var selectedFile = abSvc.UserSelectFileFromArchive(items);
                    if (selectedFile != null)
                    {
                        var image = selectedFile.GetBytes();
                        this.rsrcFork = new ResourceFork(image, arch);
                        this.image = new LoadedImage(addrLoad, image);
                        this.imageMap = new ImageMap(addrLoad, image.Length);
                        return new Program(this.image, this.imageMap, arch, platform);
                    }
                }
            }

            var li = new LoadedImage(addrLoad, dataFork);
            return new Program(li, li.CreateImageMap(), arch, platform);
        }
Example #3
0
 private void CheckImageMapTypes(ImageMap map, params string[] types)
 {
     int length = types.Length;
     Assert.AreEqual(length, map.Items.Count);
     for (int i = 0; i < length; i++)
         Assert.AreEqual(types[i], map.Items.Values[i].DataType.ToString());
 }
Example #4
0
 public Program(LoadedImage image, ImageMap imageMap, IProcessorArchitecture arch, Platform platform) : this()
 {
     this.Image = image;
     this.ImageMap = imageMap;
     this.Architecture = arch;
     this.Platform = platform;
 }
Example #5
0
	public void BuildGrid()
	{
		var grid = PointyHexGrid<UVCell>.ThinRectangle(11, 11);

		var baseMap = new PointyHexMap(cellPrefab.Dimensions * 1.1f); 

		Debug.Log(cellPrefab.Dimensions);
		
		var cellMap = baseMap
			.WithWindow(ExampleUtils.ScreenRect)
			.AlignMiddleCenter(grid)
			.To3DXY();
		
		var imageMap = 
			new ImageMap<PointyHexPoint>(new Rect(0, 0, 1, 1), grid, baseMap);

		foreach (var point in grid)
		{
			var worldPosition = cellMap[point];

			var cell = Instantiate(cellPrefab);
			Debug.Log(cell.Dimensions);

			cell.transform.parent = gridRoot.transform;
			cell.transform.localScale = Vector3.one;
			cell.transform.localPosition = worldPosition;

			cell.SetTexture(texture);
			cell.name = point.ToString();
			
			var imagePoint = imageMap[point];

			cell.SetUVs(imagePoint, imageMap.GetCellDimensions(point));
		}
	}
Example #6
0
		private void AddExportedEntryPoints(Address addrLoad, ImageMap imageMap, List<EntryPoint> entryPoints)
		{
			ImageReader rdr = imgLoaded.CreateLeReader(rvaExportTable);
			rdr.ReadLeUInt32();	// Characteristics
			rdr.ReadLeUInt32(); // timestamp
			rdr.ReadLeUInt32();	// version.
			rdr.ReadLeUInt32();	// binary name.
			rdr.ReadLeUInt32();	// base ordinal
			int nExports = rdr.ReadLeInt32();
			int nNames = rdr.ReadLeInt32();
			if (nExports != nNames)
				throw new BadImageFormatException("Unexpected discrepancy in PE image.");
			uint rvaApfn = rdr.ReadLeUInt32();
			uint rvaNames = rdr.ReadLeUInt32();

			ImageReader rdrAddrs = imgLoaded.CreateLeReader(rvaApfn);
			ImageReader rdrNames = imgLoaded.CreateLeReader(rvaNames);
			for (int i = 0; i < nNames; ++i)
			{
                EntryPoint ep = LoadEntryPoint(addrLoad, rdrAddrs, rdrNames);
				if (imageMap.IsExecutableAddress(ep.Address))
				{
					entryPoints.Add(ep);
				}
			}
		}
 public void Setup()
 {
     mr = new MockRepository();
     seg1 = new ImageMapSegment("seg1", AccessMode.Execute) { Address = Address.Ptr32(0x01000) };
     seg2 = new ImageMapSegment("seg2", AccessMode.Execute) { Address = Address.Ptr32(0x02000) };
     map = new ImageMap(seg1.Address, 0x4000);
 }
 void Example3()
 {
     string imagePath = @"Assets\ODFSample\Examples\example3.png";
     TextDocument document = new TextDocument();
     document.New();
     //Create standard paragraph
     Paragraph paragraphOuter = ParagraphBuilder.CreateStandardTextParagraph(document);
     //Create the frame with graphic
     Frame frame = new Frame(document, "frame1", "graphic1", imagePath);
     //Create a Draw Area Rectangle
     DrawAreaRectangle drawAreaRec = new DrawAreaRectangle(
         document, "0cm", "0cm", "1.5cm", "2.5cm", null);
     drawAreaRec.Href = "http://OpenDocument4all.com";
     //Create a Draw Area Circle
     DrawAreaCircle drawAreaCircle = new DrawAreaCircle(
         document, "4cm", "4cm", "1.5cm", null);
     drawAreaCircle.Href = "http://AODL.OpenDocument4all.com";
     DrawArea[] drawArea = new DrawArea[2] { drawAreaRec, drawAreaCircle };
     //Create a Image Map
     ImageMap imageMap = new ImageMap(document, drawArea);
     //Add Image Map to the frame
     frame.Content.Add(imageMap);
     //Add frame to paragraph
     paragraphOuter.Content.Add(frame);
     //Add paragraph to document
     document.Content.Add(paragraphOuter);
     //Save the document
     document.SaveTo(@"example3_simpleImageMap.odt");
 }
Example #9
0
 private void CheckImageMapSizes(ImageMap map, params int[] sizes)
 {
     int length = sizes.Length;
     Assert.AreEqual(length, map.Items.Count);
     for (int i = 0; i < length; i++)
         Assert.AreEqual(sizes[i], map.Items.Values[i].Size);
 }
Example #10
0
 public void CreateTypedItem_EmptyMap()
 {
     var map = new ImageMap(addrBase, 0x0100);
     Assert.AreEqual(1, map.Items.Count);
     ImageMapItem item;
     Assert.IsTrue(map.TryFindItemExact(addrBase, out item));
     Assert.AreEqual(0x100, item.Size);
 }
Example #11
0
 private void CheckImageMapAddresses(ImageMap map, params string[] addresses)
 {
     int length = addresses.Length;
     Assert.AreEqual(length, map.Items.Count);
     for (int i = 0; i < length; i++)
     {
         Assert.AreEqual(addresses[i], map.Items.Keys[i].ToString());
         Assert.AreEqual(addresses[i], map.Items.Values[i].Address.ToString());
     }
 }
Example #12
0
	void Awake()
	{
		if (_instance != null)
		{
			Debug.LogWarning("Too many image maps found. This is a singleton");
			Destroy(this);
		}
		else
			_instance = this;
	}
Example #13
0
 public void AddNamedSegment()
 {
     ImageMap map = new ImageMap(Address.SegPtr(0x0B00, 0), 40000);
     map.AddSegment(Address.SegPtr(0xC00, 0), "0C00", AccessMode.ReadWrite, 0);
     IEnumerator<KeyValuePair<Address,ImageMapSegment>> e = map.Segments.GetEnumerator();
     GetNextMapSegment(e);
     ImageMapSegment s = GetNextMapSegment(e);
     Assert.AreEqual("0C00", s.Name);
     Assert.AreEqual(35904, s.Size);
 }
Example #14
0
 public override Program Load(Address addrLoad)
 {
     int iImageStart = (exe.e_cparHeader * 0x10);
     int cbImageSize = exe.e_cpImage * ExeImageLoader.CbPageSize - iImageStart;
     byte[] bytes = new byte[cbImageSize];
     int cbCopy = Math.Min(cbImageSize, RawImage.Length - iImageStart);
     Array.Copy(RawImage, iImageStart, bytes, 0, cbCopy);
     imgLoaded = new LoadedImage(addrLoad, bytes);
     imgLoadedMap = imgLoaded.CreateImageMap();
     return new Program(imgLoaded, imgLoadedMap, arch, platform);
 }
Example #15
0
 public void CreateItem_MiddleOfEmptyRange()
 {
     var map = new ImageMap(addrBase, 0x0100);
     map.AddItemWithSize(
         addrBase + 0x10,
         new ImageMapItem(0x10) { DataType = new ArrayType(PrimitiveType.Byte, 10) });
     map.Dump();
     Assert.AreEqual(3, map.Items.Count);
     ImageMapItem item;
     Assert.IsTrue(map.TryFindItemExact(addrBase, out item));
     Assert.AreEqual(0x10, item.Size);
     Assert.IsInstanceOf<UnknownType>(item.DataType);
 }
Example #16
0
        private Address CreateImageMapItem(ImageMap map, DataType dt, Address addr = null)
        {
            addr = (addr != null) ? addr : map.Items.Keys.LastOrDefault();
            var curAddr = (addr != null) ? addr : map.BaseAddress;

            var size = (uint)dt.Size;

            var imageMapItem = new ImageMapItem(size) { Address = curAddr };
            if (dt != null)
                imageMapItem.DataType = dt;
            map.AddItemWithSize(curAddr, imageMapItem);
            return imageMapItem.EndAddress;
        }
Example #17
0
		public void Dump(Program program, ImageMap map, TextWriter stm)
		{
			if (map == null)
			{
				DumpAssembler(program.Image, program.Image.BaseAddress, program.Image.BaseAddress + (uint)program.Image.Length, stm);
			}
			else
			{
				foreach (ImageMapItem i in map.Items.Values)
				{
                    if (!program.Image.IsValidAddress(i.Address))
                        continue;
					//				Address addrLast = i.Address + i.Size;
					ImageMapBlock block = i as ImageMapBlock;
					if (block != null)
					{
                        stm.WriteLine();
                        if (program.Procedures.ContainsKey(block.Address))
						{
							stm.WriteLine(block.Address.GenerateName("fn","()"));
						}
						else																			 
						{
							stm.WriteLine(block.Address.GenerateName("l",":"));
						}
						DumpAssembler(program.Image, block.Address, block.Address + block.Size, stm);
						continue;
					}

					ImageMapVectorTable table = i as ImageMapVectorTable;
					if (table != null)
					{
						stm.WriteLine("{0} table at {1} ({2} bytes)",
							table.IsCallTable?"Call":"Jump",
							table.Address, table.Size);
						foreach (Address addr in table.Addresses)
						{
							stm.WriteLine("\t{0}", addr != null ? addr.ToString() : "-- null --");
						}
						DumpData(program.Image, i.Address, i.Size, stm);
					}
					else
					{
						DumpData(program.Image, i.Address, i.Size, stm);
					}							   
				}
			}
		}
 private void DisassemblyControlForm_Load(object sender, EventArgs e)
 {
     var random = new Random(0x4711);
     var image =   new LoadedImage(Address.Ptr32(0x00100000),
         Enumerable.Range(0, 10000)
         .Select(i => (byte)random.Next(256)).ToArray());
     var imageMap = new ImageMap(image.BaseAddress, image.Bytes.Length);
     disassemblyControl1.Model = new DisassemblyTextModel(
         new CoreProgram
         {
             //new Decompiler.Arch.X86.X86ArchitectureFlat32();
             Architecture = new Reko.Arch.PowerPC.PowerPcArchitecture32(),
             Image = image,
             ImageMap = imageMap
         });
     disassemblyControl1.StartAddress = image.BaseAddress;
 }
 public override IEnumerable<Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     var knownLinAddresses = knownAddresses.Select(a => a.ToUInt32()).ToHashSet();
     if (flags != PointerScannerFlags.Calls)
         throw new NotImplementedException(string.Format("Haven't implemented support for scanning for {0} yet.", flags));
     while (rdr.IsValid)
     {
         uint linAddrCall =  rdr.Address.ToUInt32();
         var opcode = rdr.ReadLeUInt32();
         if ((opcode & 0x0F000000) == 0x0B000000)         // BL
         {
             int offset = ((int)opcode << 8) >> 6;
             uint target = (uint)(linAddrCall + 8 + offset);
             if (knownLinAddresses.Contains(target))
                 yield return Address.Ptr32(linAddrCall);
         }
     }
 }
Example #20
0
        private void chkShowData_CheckedChanged(object sender, EventArgs e)
        {
            if (chkShowData.Checked)
            {
                var img = new LoadedImage(Address.Ptr32(0x00100000), new byte[2560]);
                var imgMap = new ImageMap(img.BaseAddress, img.Length);
                imgMap.AddItemWithSize(Address.Ptr32(0x00100000), new ImageMapBlock { Size = 30 });
                imgMap.AddItemWithSize(Address.Ptr32(0x00100100), new ImageMapBlock { Size = 300 });
                imgMap.AddItemWithSize(Address.Ptr32(0x00100500), new ImageMapBlock { Size = 600 });
                memoryControl1.ProgramImage = img;
                memoryControl1.Architecture = new X86ArchitectureFlat32();

                imageMapView1.Image = img;
                imageMapView1.ImageMap = imgMap;
            }
            else
            {
                memoryControl1.ProgramImage = null;
                memoryControl1.Architecture = null;

            }
        }
Example #21
0
            void parseSection64(uint protection, ImageMap imageMap)
            {
                var   abSectname = rdr.ReadBytes(16);
                var   abSegname  = rdr.ReadBytes(16);
                ulong addr;
                ulong size;
                uint  offset;
                uint  align;
                uint  reloff;
                uint  nreloc;
                uint  flags;
                uint  reserved1;
                uint  reserved2;
                uint  reserved3;

                if (!rdr.TryReadUInt64(out addr) ||
                    !rdr.TryReadUInt64(out size) ||
                    !rdr.TryReadUInt32(out offset) ||
                    !rdr.TryReadUInt32(out align) ||
                    !rdr.TryReadUInt32(out reloff) ||
                    !rdr.TryReadUInt32(out nreloc) ||
                    !rdr.TryReadUInt32(out flags) ||
                    !rdr.TryReadUInt32(out reserved1) ||
                    !rdr.TryReadUInt32(out reserved2) ||
                    !rdr.TryReadUInt32(out reserved3))
                {
                    throw new BadImageFormatException("Could not read Mach-O section.");
                }

                var sectionName = GetAsciizString(abSectname);
                var segmentName = GetAsciizString(abSegname);

                Debug.Print("Found section '{0}' in segment '{1}, addr = 0x{2:X}, size = 0x{3:X}.",
                            sectionName,
                            segmentName,
                            addr,
                            size);

                AccessMode am = 0;

                if ((protection & VM_PROT_READ) != 0)
                {
                    am |= AccessMode.Read;
                }
                if ((protection & VM_PROT_WRITE) != 0)
                {
                    am |= AccessMode.Write;
                }
                if ((protection & VM_PROT_EXECUTE) != 0)
                {
                    am |= AccessMode.Execute;
                }

                var bytes = rdr.CreateNew(this.ldr.RawImage, offset);
                var mem   = new MemoryArea(
                    Address.Ptr64(addr),
                    bytes.ReadBytes((uint)size));
                var imageSection = new ImageSegment(
                    string.Format("{0},{1}", segmentName, sectionName),
                    mem,
                    am);

                //imageSection.setBss((section.flags & SECTION_TYPE) == S_ZEROFILL);

                //if (!imageSection.isBss()) {
                //    auto pos = source_->pos();
                //    if (!source_->seek(section.offset)) {
                //        throw ParseError("Could not seek to the beginning of the section's content.");
                //    }
                //    auto bytes = source_->read(section.size);
                //    if (checked_cast<uint>(bytes.size()) != section.size) {
                //        log_.warning("Could not read all the section's content.");
                //    } else {
                //        imageSection->setContent(std::move(bytes));
                //    }
                //    source_->seek(pos);
                //}

                //sections_.push_back(imageSection.get());
                //image_->addSection(std::move(imageSection));
                imageMap.AddSegment(imageSection);
            }
Example #22
0
 private void Given_Program()
 {
     this.imageMap         = segmentMap.CreateImageMap();
     this.program          = new Program(segmentMap, arch.Object, platform.Object);
     this.program.ImageMap = imageMap;
 }
Example #23
0
        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.imageMap  = imgLoaded.CreateImageMap();
            return(imgLoaded);
        }
Example #24
0
 private void ImageMap_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
 {
     ImageMap.ReleaseMouseCapture();
 }
Example #25
0
        /// <summary>コントロール取得&イベントハンドラ設定</summary>
        /// <param name="ctrl">コントロール</param>
        /// <param name="prefixAndEvtHndHt">プレフィックスとイベント ハンドラのディクショナリ</param>
        /// <param name="controlHt">コントロールのディクショナリ</param>
        internal static void GetCtrlAndSetClickEventHandler2(
            Control ctrl, Dictionary <string, object> prefixAndEvtHndHt, Dictionary <string, Control> controlHt)
        {
            // ループ
            foreach (string prefix in prefixAndEvtHndHt.Keys)
            {
                object eventHandler = prefixAndEvtHndHt[prefix];

                #region チェック処理

                // コントロール指定が無い場合
                if (ctrl == null)
                {
                    // 何もしないで戻る。
                    return;
                }

                // プレフィックス指定が無い場合
                if (prefix == null || prefix == "")
                {
                    // 何もしないで戻る。
                    return;
                }

                #endregion

                #region コントロール取得&イベントハンドラ設定

                // コントロールのIDチェック
                if (ctrl.ID == null)
                {
                    // コントロールID無し
                }
                else
                {
                    // コントロールID有り

                    // コントロールのID長確認
                    if (prefix.Length <= ctrl.ID.Length)
                    {
                        // 指定のプレフィックス
                        if (prefix == ctrl.ID.Substring(0, prefix.Length))
                        {
                            // イベントハンドラを設定する。
                            if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_BUTTON))
                            {
                                // BUTTON
                                Button button = FxCmnFunction.CastByAsOperator <Button>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                button.Click += (EventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_LINK_BUTTON))
                            {
                                // LINK BUTTON
                                LinkButton linkButton = FxCmnFunction.CastByAsOperator <LinkButton>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                linkButton.Click += (EventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_IMAGE_BUTTON))
                            {
                                // IMAGE BUTTON
                                ImageButton imageButton = FxCmnFunction.CastByAsOperator <ImageButton>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                imageButton.Click += (ImageClickEventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_IMAGE_MAP))
                            {
                                // IMAGE MAP
                                ImageMap imageMap = FxCmnFunction.CastByAsOperator <ImageMap>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                imageMap.Click += (ImageMapEventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                            //else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_COMMAND))
                            //{
                            //    // COMMAND
                            //    Command command = FxCmnFunction.CastByAsOperator<Command>(ctrl, prefix);

                            //    // ハンドラをキャストして設定
                            //    command.Click += (EventHandler)eventHandler;

                            //    // ディクショナリに格納
                            //    controlHt[ctrl.ID] = ctrl;
                            //    break;
                            //}
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_DROP_DOWN_LIST))
                            {
                                // DROP DOWN LIST
                                DropDownList dropDownList = FxCmnFunction.CastByAsOperator <DropDownList>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                dropDownList.SelectedIndexChanged += (EventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_LIST_BOX))
                            {
                                // LIST BOX
                                ListBox listBox = FxCmnFunction.CastByAsOperator <ListBox>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                listBox.SelectedIndexChanged += (EventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_RADIO_BUTTON))
                            {
                                // RADIO BUTTON
                                RadioButton radioButton = FxCmnFunction.CastByAsOperator <RadioButton>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                radioButton.CheckedChanged += (EventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }

                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_RADIOBUTTONLIST))
                            {
                                // RADIOBUTTONLIST
                                RadioButtonList radioButtonlist = FxCmnFunction.CastByAsOperator <RadioButtonList>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                radioButtonlist.SelectedIndexChanged += (EventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }

                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_CHECKBOXLIST))
                            {
                                // CHECKBOXLIST
                                CheckBoxList checkboxlist = FxCmnFunction.CastByAsOperator <CheckBoxList>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                checkboxlist.SelectedIndexChanged += (EventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_REPEATER))
                            {
                                // REPEATER
                                Repeater repeater = FxCmnFunction.CastByAsOperator <Repeater>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                repeater.ItemCommand += (RepeaterCommandEventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_GRIDVIEW))
                            {
                                // GRIDVIEW
                                GridView gridView = FxCmnFunction.CastByAsOperator <GridView>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                object[] eventHandlers = ((object[])eventHandler);

                                // 全コマンド
                                gridView.RowCommand += (GridViewCommandEventHandler)eventHandlers[0];
                                // 選択
                                gridView.SelectedIndexChanged += (EventHandler)eventHandlers[1];
                                // 編集(更新)
                                gridView.RowUpdating += (GridViewUpdateEventHandler)eventHandlers[2];
                                // 編集(削除)
                                gridView.RowDeleting += (GridViewDeleteEventHandler)eventHandlers[3];
                                // ページング
                                gridView.PageIndexChanging += (GridViewPageEventHandler)eventHandlers[4];
                                // ソーティング
                                gridView.Sorting += (GridViewSortEventHandler)eventHandlers[5];

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_LISTVIEW))
                            {
                                // LISTVIEW
                                ListView listView = FxCmnFunction.CastByAsOperator <ListView>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                object[] eventHandlers = ((object[])eventHandler);

                                // Delete
                                listView.ItemDeleting += (EventHandler <ListViewDeleteEventArgs>)eventHandlers[0];
                                //Update
                                listView.ItemUpdating += (EventHandler <ListViewUpdateEventArgs>)eventHandlers[1];
                                // Paging
                                listView.PagePropertiesChanged += (EventHandler)eventHandlers[2];
                                //Sorting event handler
                                listView.Sorting += (EventHandler <ListViewSortEventArgs>)eventHandlers[3];
                                //ItemCommand event handler
                                listView.ItemCommand += (EventHandler <ListViewCommandEventArgs>)eventHandlers[5];
                                FxCmnFunction.AddControlToDic(ctrl, controlHt);
                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                FxCmnFunction.AddControlToDic(ctrl, controlHt);
                            }
                            else if (prefix == GetConfigParameter.GetConfigValue(FxLiteral.PREFIX_OF_TEXTBOX))
                            {
                                // Text box
                                System.Web.UI.WebControls.TextBox textBox = FxCmnFunction.CastByAsOperator <System.Web.UI.WebControls.TextBox>(ctrl, prefix);

                                // ハンドラをキャストして設定
                                textBox.TextChanged += (EventHandler)eventHandler;

                                // ディクショナリに格納
                                controlHt[ctrl.ID] = ctrl;
                                break;
                            }
                        }
                    }
                }

                #endregion
            }

            #region 再帰

            // 子コントロールがある場合、
            if (ctrl.HasControls())
            {
                // 子コントロール毎に
                foreach (Control childCtrl in ctrl.Controls)
                {
                    // 再帰する。
                    FxCmnFunction.GetCtrlAndSetClickEventHandler2(childCtrl, prefixAndEvtHndHt, controlHt);
                }
            }

            #endregion
        }
Example #26
0
        public override Program Load(Address addrLoad)
        {
            if (sections > 0)
            {
                sectionMap = LoadSections(addrLoad, rvaSectionTable, sections);
                imgLoaded = LoadSectionBytes(addrLoad, sectionMap);
                ImageMap = imgLoaded.CreateImageMap();
            }
            imgLoaded.BaseAddress = addrLoad;
            this.program = new Program(imgLoaded, ImageMap, arch, platform);
            this.importReferences = program.ImportReferences;

            var rsrcLoader = new PeResourceLoader(this.imgLoaded, rvaResources);
            List<ProgramResource> items = rsrcLoader.Load();
            program.Resources.Resources.AddRange(items);
            program.Resources.Name = "PE resources";

            return program;
        }
Example #27
0
 public override abstract IEnumerable <Address> CreatePointerScanner(
     ImageMap map,
     ImageReader rdr,
     IEnumerable <Address> addrs,
     PointerScannerFlags flags);
Example #28
0
 public IEnumerable<Address> CreatePointerScanner(
     ImageMap imageMap,
     ImageReader rdr,
     IEnumerable<Address> address,
     PointerScannerFlags pointerScannerFlags)
 {
     return Architecture.CreatePointerScanner(imageMap, rdr, address, pointerScannerFlags);
 }
Example #29
0
 public override IEnumerable<Address> CreateInstructionScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     var knownLinAddresses = knownAddresses.Select(a => (ulong)a.ToLinear()).ToHashSet();
     return new X86PointerScanner64(rdr, knownLinAddresses, flags).Select(li => map.MapLinearAddressToAddress(li));
 }
Example #30
0
    private bool LocalizeIsWeak(ScalePoint point, int steps, int[,] processed)
    {
        bool needToAdjust = true;
        int  adjusted     = steps;

        while (needToAdjust)
        {
            int x = point.X;
            int y = point.Y;

            if (point.Level <= 0 || point.Level >= (spaces.Length - 1))
            {
                return(true);
            }

            ImageMap space = spaces[point.Level];
            if (x <= 0 || x >= (space.XDim - 1))
            {
                return(true);
            }
            if (y <= 0 || y >= (space.YDim - 1))
            {
                return(true);
            }

            double       dp;
            SimpleMatrix adj = GetAdjustment(point, point.Level, x, y, out dp);

            double adjS = adj[0, 0];
            double adjY = adj[1, 0];
            double adjX = adj[2, 0];
            if (Math.Abs(adjX) > 0.5 || Math.Abs(adjY) > 0.5)
            {
                if (adjusted == 0)
                {
                    return(true);
                }

                adjusted -= 1;

                double distSq = adjX * adjX + adjY * adjY;
                if (distSq > 2.0)
                {
                    return(true);
                }

                point.X = (int)(point.X + adjX + 0.5);
                point.Y = (int)(point.Y + adjY + 0.5);

                continue;
            }

            if (processed[point.X, point.Y] != 0)
            {
                return(true);
            }

            processed[point.X, point.Y] = 1;

            PointLocalInformation local = new PointLocalInformation(adjS, adjX, adjY);

            local.DValue = space[point.X, point.Y] + 0.5 * dp;
            point.Local  = local;

            needToAdjust = false;
        }

        return(false);
    }
Example #31
0
    private ArrayList GenerateKeypointSingle(double imgScale, ScalePoint point,
                                             int binCount, double peakRelThresh, int scaleCount,
                                             double octaveSigma)
    {
        double kpScale = octaveSigma *
                         Math.Pow(2.0, (point.Level + point.Local.ScaleAdjust) / scaleCount);

        double sigma    = 3.0 * kpScale;
        int    radius   = (int)(3.0 * sigma / 2.0 + 0.5);
        int    radiusSq = radius * radius;

        ImageMap magnitude = magnitudes[point.Level];
        ImageMap direction = directions[point.Level];

        int xMin = Math.Max(point.X - radius, 1);
        int xMax = Math.Min(point.X + radius, magnitude.XDim - 1);
        int yMin = Math.Max(point.Y - radius, 1);
        int yMax = Math.Min(point.Y + radius, magnitude.YDim - 1);

        double gaussianSigmaFactor = 2.0 * sigma * sigma;

        double[] bins = new double[binCount];

        for (int y = yMin; y < yMax; ++y)
        {
            for (int x = xMin; x < xMax; ++x)
            {
                int relX = x - point.X;
                int relY = y - point.Y;
                if (IsInCircle(relX, relY, radiusSq) == false)
                {
                    continue;
                }

                double gaussianWeight = Math.Exp
                                            (-((relX * relX + relY * relY) / gaussianSigmaFactor));

                int binIdx = FindClosestRotationBin(binCount, direction[x, y]);
                bins[binIdx] += magnitude[x, y] * gaussianWeight;
            }
        }


        AverageWeakBins(bins, binCount);

        double maxGrad = 0.0;
        int    maxBin  = 0;

        for (int b = 0; b < binCount; ++b)
        {
            if (bins[b] > maxGrad)
            {
                maxGrad = bins[b];
                maxBin  = b;
            }
        }

        double maxPeakValue, maxDegreeCorrection;

        InterpolateOrientation(bins[maxBin == 0 ? (binCount - 1) : (maxBin - 1)],
                               bins[maxBin], bins[(maxBin + 1) % binCount],
                               out maxDegreeCorrection, out maxPeakValue);

        bool[] binIsKeypoint = new bool[binCount];
        for (int b = 0; b < binCount; ++b)
        {
            binIsKeypoint[b] = false;

            if (b == maxBin)
            {
                binIsKeypoint[b] = true;
                continue;
            }

            if (bins[b] < (peakRelThresh * maxPeakValue))
            {
                continue;
            }

            int leftI  = (b == 0) ? (binCount - 1) : (b - 1);
            int rightI = (b + 1) % binCount;
            if (bins[b] <= bins[leftI] || bins[b] <= bins[rightI])
            {
                continue;
            }

            binIsKeypoint[b] = true;
        }

        ArrayList keypoints = new ArrayList();

        double oneBinRad = (2.0 * Math.PI) / binCount;

        for (int b = 0; b < binCount; ++b)
        {
            if (binIsKeypoint[b] == false)
            {
                continue;
            }

            int bLeft  = (b == 0) ? (binCount - 1) : (b - 1);
            int bRight = (b + 1) % binCount;

            double peakValue;
            double degreeCorrection;

            if (InterpolateOrientation(bins[bLeft], bins[b], bins[bRight],
                                       out degreeCorrection, out peakValue) == false)
            {
                throw (new InvalidOperationException("BUG: Parabola fitting broken"));
            }


            double degree = (b + degreeCorrection) * oneBinRad - Math.PI;

            if (degree < -Math.PI)
            {
                degree += 2.0 * Math.PI;
            }
            else if (degree > Math.PI)
            {
                degree -= 2.0 * Math.PI;
            }

            Keypoint kp = new Keypoint(imgScaled[point.Level],
                                       point.X + point.Local.FineX,
                                       point.Y + point.Local.FineY,
                                       imgScale, kpScale, degree);
            keypoints.Add(kp);
        }

        return(keypoints);
    }
Example #32
0
        public void Dump(Program program, ImageMap map, TextWriter stm)
        {
            ImageMapSegment segment = null;
            if (map == null)
            {
                DumpAssembler(program.Image, program.Image.BaseAddress, program.Image.BaseAddress + (uint)program.Image.Length, stm);
            }
            else
            {

                foreach (ImageMapItem i in map.Items.Values)
                {
                    if (!program.Image.IsValidAddress(i.Address))
                        continue;
                    ImageMapSegment seg;
                    if (!map.TryFindSegment(i.Address, out seg))
                        continue;
                    if (seg != segment)
                    {
                        segment = seg;
                        stm.WriteLine(";;; Segment {0} ({1})", seg.Name, seg.Address);
                    }

                    //				Address addrLast = i.Address + i.Size;
                    ImageMapBlock block = i as ImageMapBlock;
                    if (block != null)
                    {
                        stm.WriteLine();
                        if (program.Procedures.ContainsKey(block.Address))
                        {
                            stm.WriteLine(block.Address.GenerateName("fn","()"));
                        }
                        else
                        {
                            stm.WriteLine(block.Address.GenerateName("l",":"));
                        }
                        DumpAssembler(program.Image, block.Address, block.Address + block.Size, stm);
                        continue;
                    }

                    ImageMapVectorTable table = i as ImageMapVectorTable;
                    if (table != null)
                    {
                        stm.WriteLine("{0} table at {1} ({2} bytes)",
                            table.IsCallTable?"Call":"Jump",
                            table.Address, table.Size);
                        foreach (Address addr in table.Addresses)
                        {
                            stm.WriteLine("\t{0}", addr != null ? addr.ToString() : "-- null --");
                        }
                        DumpData(program.Image, i.Address, i.Size, stm);
                    }
                    else
                    {
                        var segLast = segment.Address + segment.ContentSize;
                        var size = segLast - i.Address;
                        size = Math.Min(i.Size, size);
                        DumpData(program.Image, i.Address, size, stm);
                    }
                }
            }
        }
Example #33
0
 public override IEnumerable <Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
 {
     return(mode.CreateInstructionScanner(map, rdr, knownAddresses, flags));
 }
Example #34
0
    public void SetImageMap()
    {
        string[,]  arrUser = new string[, ]
        {
            { "T", "강원구", "1990005", "62" },
            { "T", "이성환", "2005004", "229" },
            { "T", "최기홍", "1988004", "460" },
            { "T", "김진철", "2009006", "674" },
            { "M", "이지수", "2004038", "17" },
            { "M", "서도원", "1994001", "50" },
            { "M", "박재현", "1995006", "84" },
            { "M", "박희재", "1996035", "118" },
            { "M", "안병모", "1995002", "152" },
            { "M", "정진욱", "1991012", "186" },
            { "M", "이정한", "1995008", "218" },
            { "M", "손현익", "1992032", "251" },
            { "M", "김지선", "1992035", "284" },
            { "M", "김상복", "1993031", "317" },
            { "M", "최인환", "1990008", "350" },
            { "M", "김대중", "1993020", "383" },
            { "M", "이종화", "1987016", "0" },
            { "M", "이시영", "1984016", "0" },
            { "M", "홍순혁", "1993036", "0" },
            { "M", "김판상", "1991022", "0" },
            { "M", "김주경", "1988010", "0" },
            { "M", "손창민", "1991018", "0" },
            { "M", "한영채", "1984005", "0" },
            { "M", "권세장", "1986002", "0" },
            { "M", "김경중", "1990007", "0" },
            { "M", "김동준", "1991009", "0" },
            { "M", "고문열", "1996028", "0" },
        };

        ImageMap imgMap = new ImageMap();

        imgMap.ImageUrl = "~/eis_kdgas/경동조직도.jpg";

        RectangleHotSpot hs;
        int iRow     = arrUser.Length / 4;
        int iPosLeft = 0;

        for (int i = 0; i < iRow; i++)
        {
            hs = new RectangleHotSpot();
            hs.AlternateText = arrUser[i, 1];
            hs.NavigateUrl   = "SEM_Empl_R002.aspx?EMP_NO=" + arrUser[i, 2];

            if (arrUser[i, 0].Equals("T"))
            {
                hs.Left   = int.Parse(arrUser[i, 3]);
                hs.Top    = iPosT_LV1;
                hs.Right  = hs.Left + iWidth_LV1;
                hs.Bottom = iPosT_LV1 + iHeight_LV1;
            }
            else
            {
                iPosLeft += (iPosLeft == 0) ? iPosStart_LV2 : 33;
                hs.Left   = iPosLeft;
                hs.Top    = iPosT_LV2;
                hs.Right  = hs.Left + iWidth_LV2;
                hs.Bottom = iPosT_LV2 + iHeight_LV2;
            }

            imgMap.HotSpots.Add(hs);
        }

        tdDigm.Controls.Add(imgMap);
    }
Example #35
0
    private ArrayList CreateDescriptors(ArrayList keypoints,
                                        ImageMap magnitude, ImageMap direction,
                                        double considerScaleFactor, int descDim, int directionCount,
                                        double fvGradHicap)
    {
        if (keypoints.Count <= 0)
        {
            return(keypoints);
        }

        considerScaleFactor *= ((Keypoint)keypoints[0]).Scale;
        double dDim05 = ((double)descDim) / 2.0;

        int radius = (int)(((descDim + 1.0) / 2) *
                           Math.Sqrt(2.0) * considerScaleFactor + 0.5);

        ArrayList survivors = new ArrayList();

        double sigma2Sq = 2.0 * dDim05 * dDim05;

        foreach (Keypoint kp in keypoints)
        {
            double angle = -kp.Orientation;

            kp.CreateVector(descDim, descDim, directionCount);
            for (int y = -radius; y < radius; ++y)
            {
                for (int x = -radius; x < radius; ++x)
                {
                    double yR = Math.Sin(angle) * x +
                                Math.Cos(angle) * y;
                    double xR = Math.Cos(angle) * x -
                                Math.Sin(angle) * y;

                    yR /= considerScaleFactor;
                    xR /= considerScaleFactor;

                    if (yR >= (dDim05 + 0.5) || xR >= (dDim05 + 0.5) ||
                        xR <= -(dDim05 + 0.5) || yR <= -(dDim05 + 0.5))
                    {
                        continue;
                    }
                    int currentX = (int)(x + kp.X + 0.5);
                    int currentY = (int)(y + kp.Y + 0.5);
                    if (currentX < 1 || currentX >= (magnitude.XDim - 1) ||
                        currentY < 1 || currentY >= (magnitude.YDim - 1))
                    {
                        continue;
                    }

                    double magW = Math.Exp(-(xR * xR + yR * yR) / sigma2Sq) *
                                  magnitude[currentX, currentY];

                    yR += dDim05 - 0.5;
                    xR += dDim05 - 0.5;

                    int[]    xIdx      = new int[2];
                    int[]    yIdx      = new int[2];
                    int[]    dirIdx    = new int[2];
                    double[] xWeight   = new double[2];
                    double[] yWeight   = new double[2];
                    double[] dirWeight = new double[2];

                    if (xR >= 0)
                    {
                        xIdx[0]    = (int)xR;
                        xWeight[0] = (1.0 - (xR - xIdx[0]));
                    }
                    if (yR >= 0)
                    {
                        yIdx[0]    = (int)yR;
                        yWeight[0] = (1.0 - (yR - yIdx[0]));
                    }

                    if (xR < (descDim - 1))
                    {
                        xIdx[1]    = (int)(xR + 1.0);
                        xWeight[1] = xR - xIdx[1] + 1.0;
                    }
                    if (yR < (descDim - 1))
                    {
                        yIdx[1]    = (int)(yR + 1.0);
                        yWeight[1] = yR - yIdx[1] + 1.0;
                    }

                    double dir = direction[currentX, currentY] - kp.Orientation;
                    if (dir <= -Math.PI)
                    {
                        dir += Math.PI;
                    }
                    if (dir > Math.PI)
                    {
                        dir -= Math.PI;
                    }

                    double idxDir = (dir * directionCount) /
                                    (2.0 * Math.PI);
                    if (idxDir < 0.0)
                    {
                        idxDir += directionCount;
                    }

                    dirIdx[0]    = (int)idxDir;
                    dirIdx[1]    = (dirIdx[0] + 1) % directionCount;
                    dirWeight[0] = 1.0 - (idxDir - dirIdx[0]);
                    dirWeight[1] = idxDir - dirIdx[0];

                    for (int iy = 0; iy < 2; ++iy)
                    {
                        for (int ix = 0; ix < 2; ++ix)
                        {
                            for (int id = 0; id < 2; ++id)
                            {
                                kp.FVSet(xIdx[ix], yIdx[iy], dirIdx[id],
                                         kp.FVGet(xIdx[ix], yIdx[iy], dirIdx[id]) +
                                         xWeight[ix] * yWeight[iy] * dirWeight[id] * magW);
                            }
                        }
                    }
                }
            }

            CapAndNormalizeFV(kp, fvGradHicap);

            survivors.Add(kp);
        }

        return(survivors);
    }
Example #36
0
        bool LoadSegment(NeSegment seg, LoadedImage loadedImage, ImageMap imageMap)
        {
            Array.Copy(
                RawImage,
                (uint)seg.DataOffset << this.cbFileAlignmentShift,
                loadedImage.Bytes,
                seg.LinearAddress - (int)loadedImage.BaseAddress.ToLinear(),
                seg.DataLength);
            var x = seg.Address.ToLinear();

            AccessMode access =
                (seg.Flags & 1) != 0
                    ? AccessMode.ReadWrite
                    : AccessMode.ReadExecute;
            imageMap.AddSegment(
                seg.Address,
                seg.Address.Selector.Value.ToString("X4"),
                access,
                seg.DataLength);

            var rdr = new LeImageReader(
                RawImage,
                seg.DataLength + ((uint)seg.DataOffset << this.cbFileAlignmentShift));
            int count = rdr.ReadLeInt16();
            return ApplyRelocations(rdr, count, seg);
        }
Example #37
0
 public Scanner(
     Program program, 
     IDictionary<Address, ProcedureSignature> callSigs,
     IImportResolver importResolver,
     DecompilerEventListener eventListener)
 {
     this.program = program;
     this.image = program.Image;
     this.imageMap = program.ImageMap;
     this.importResolver = importResolver;
     this.callSigs = callSigs;
     this.eventListener = eventListener;
     if (imageMap == null)
         throw new InvalidOperationException("Program must have an image map.");
     this.queue = new PriorityQueue<WorkItem>();
     this.blocks = new Map<Address, BlockRange>();
     this.blockStarts = new Dictionary<Block, Address>();
     this.pseudoProcs = program.PseudoProcedures;
     this.vectors = program.Vectors;
     this.importReferences = program.ImportReferences;
     this.visitedProcs = new HashSet<Procedure>();
 }
Example #38
0
        public override IEnumerable <Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
        {
            var knownLinAddresses = knownAddresses.Select(a => a.ToUInt32()).ToHashSet();

            return(new M68kPointerScanner(rdr, knownLinAddresses, flags).Select(li => Address.Ptr32(li)));
        }
Example #39
0
 public abstract IEnumerable<Address> CreateInstructionScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags);
Example #40
0
        /// <summary>
        /// 画面解析タイマー
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void timerCapture_Tick(object sender, EventArgs e)
        {
            // 同時実行はひとつだけ
            if (timer1_sync == true)
            {
                //System.Diagnostics.Debug.WriteLine(string.Format("{0}: Skip Main_LOOP", DateTime.Now.ToString("HH:mm:ss")));
                return;
            }
            timer1_sync = true;
            try
            {
                // チェック
                Bitmap bmp = ScreenCapture.GetBitmap();
                if (bmp != null)
                {
                    ImageAnalyze ia = new ImageAnalyze(bmp);

                    DateTime now = DateTime.Now;

                    txtPosName.Text = ImageMap.CheckScene(ia);

                    // 画損を保存する条件を判定
                    bool nextSnap = JoyPad.SnapShot == true;

                    if (chkAutoSave.Checked == true)
                    {
                        if (txtPosName.Text == "不明" && ScreenCapture.IsWindowActive == true)
                        {
                            TimeSpan span = now - lastKown;
                            if (span.TotalSeconds > 5f * (snapCount + 1))
                            {
                                if (snapCount < 3)
                                {
                                    nextSnap = true;
                                }
                                lastKown = now;
                            }
                        }
                        else
                        {
                            lastKown  = now;
                            snapCount = 0;
                        }
                    }

                    bool freeNG = false;
                    try
                    {
#if WITHMANAGER
                        if (frmEdit != null && nextSnap == true)
                        {
                            if (nextSnap && ScreenCapture.IsWindowActive == true)
                            {
                                frmEdit.saveNextSnap = true;
                                JoyPad.SnapShot      = false;
                                snapCount++;
                            }
                            // 処理が渡った場合は true が返る
                            freeNG = frmEdit.SetImage(bmp, ImageMap.curScene);
                        }
#else
                        // 画像キャプチャ指示

                        // TODO: フラグのセットをイベントハンドラによるコールバックにするべき
                        if (JoyPad.SnapShot == true)
                        {
                            // ドライブの空き容量確認 (32MB以下なら保存しない)
                            DriveInfo di = new DriveInfo(Path.GetPathRoot(Program.ImageFileDirectory));
                            if (di.TotalFreeSpace <= 32 * 1024 * 1024)
                            {
                                return;
                            }
                            // ファイル名生成
                            string fileNameRule = "yyyy年MM月dd日HH時mm分ss秒";
                            string saveFile     = string.Format(@"{0}\{1}.png", Program.ImageFileDirectory, DateTime.Now.ToString(fileNameRule));
                            // 既に同名のファイルがあれば何もしない
                            if (File.Exists(saveFile))
                            {
                                return;
                            }
                            try
                            {
                                // PNG形式で保存
                                bmp.Save(saveFile, System.Drawing.Imaging.ImageFormat.Png);
                            }
                            catch
                            {
                            }
                        }
#endif
                    }
                    finally
                    {
                        // 必ずフラグ下ろす
                        JoyPad.SnapShot = false;

                        // キャプチャ画像を委譲してなければ後始末
                        if (freeNG == false)
                        {
                            bmp.Dispose();
                        }
                    }
                }
            }
            finally
            {
                timer1_sync = false;
            }
        }
Example #41
0
 private void AddSectionsToImageMap(Address addrLoad, ImageMap imageMap)
 {
     foreach (Section s in sectionMap.Values)
     {
         AccessMode acc = AccessMode.Read;
         if ((s.Flags & SectionFlagsWriteable) != 0)
         {
             acc |= AccessMode.Write;
         }
         if ((s.Flags & SectionFlagsExecutable) != 0)
         {
             acc |= AccessMode.Execute;
         }
         var seg = imageMap.AddSegment(addrLoad + s.VirtualAddress, s.Name, acc, s.VirtualSize);
         seg.IsDiscardable = s.IsDiscardable;
     }
 }
Example #42
0
 public IEnumerable <Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags)
 {
     throw new NotImplementedException();
 }
Example #43
0
 void LoadSegments(uint offset)
 {
     this.segments = ReadSegmentTable(offset, cSeg);
     var segFirst = segments[0];
     var segLast = segments[segments.Length - 1];
     this.image = new LoadedImage(
         PreferredBaseAddress,
         new byte[segLast.LinearAddress + segLast.DataLength]);
     this.imageMap = image.CreateImageMap();
     foreach (var segment in segments)
     {
         LoadSegment(segment, image, imageMap);
     }
 }
Example #44
0
 public BitmapTransformer(ImageMap map, ISendableColor sendable)
 {
     Map      = map;
     Sendable = sendable;
 }
Example #45
0
 public IEnumerable<Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags)
 {
     throw new NotImplementedException();
 }
Example #46
0
    protected void Doc_Grid_ItemDataBound(object sender, GridItemEventArgs e)
    {
        if (e.Item is GridDataItem)
        {
            Label     lblExt       = (Label)e.Item.FindControl("FileExt");
            Label     lblReference = (Label)e.Item.FindControl("ReferenceID");
            HyperLink url          = (HyperLink)e.Item.FindControl("File");
            ImageMap  Img          = (ImageMap)e.Item.FindControl("ImgHyper");

            string myurl = "~/Common/Resource/Contracts/" + lblReference.Text + "/" + url.ToolTip + lblExt.Text;
            if (File.Exists(Server.MapPath(myurl)))
            {
                url.CssClass    = "link";
                url.NavigateUrl = myurl;
                Img.ImageUrl    = "~/images/Fileimage.jpg";

                //switch (lblExt.Text)
                //{
                //    case ".doc":
                //        Img.ImageUrl = "~/images/Doc.jpg";
                //        break;
                //    case ".docx":
                //        Img.ImageUrl = "~/images/Doc.jpg";
                //        break;
                //    case ".xls":
                //        Img.ImageUrl = "~/images/excel.jpg";
                //        break;
                //    case ".xlsx":
                //        Img.ImageUrl = "~/images/excel.jpg";
                //        break;
                //    case ".pdf":
                //        Img.ImageUrl = "~/images/pdf.jpg";
                //        break;
                //    case ".txt":
                //        Img.ImageUrl = "~/images/txt.jpg";
                //        break;
                //    case ".dwg":
                //        Img.ImageUrl = "~/images/dwg.jpg";
                //        break;
                //    case ".png":
                //        Img.ImageUrl = "~/images/Png.png";
                //        break;
                //    case ".tiff":
                //        Img.ImageUrl = "~/images/tiff.jpg";
                //        break;
                //    case ".jpg":
                //        Img.ImageUrl = "~/images/jpeg.jpg";
                //        break;
                //    default:
                //        Img.ImageUrl = "~/images/Fileimage.jpg";
                //        break;
                //}
                url.Target = "_new";
            }
            else
            {
                url.CssClass    = "dislnk";
                url.NavigateUrl = "#";
                url.Enabled     = false;
            }
        }
    }