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()); }
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); }
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()); }
public Program(LoadedImage image, ImageMap imageMap, IProcessorArchitecture arch, Platform platform) : this() { this.Image = image; this.ImageMap = imageMap; this.Architecture = arch; this.Platform = platform; }
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)); } }
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"); }
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); }
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); }
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()); } }
void Awake() { if (_instance != null) { Debug.LogWarning("Too many image maps found. This is a singleton"); Destroy(this); } else _instance = this; }
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); }
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); }
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); }
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; }
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); } } }
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; } }
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); }
private void Given_Program() { this.imageMap = segmentMap.CreateImageMap(); this.program = new Program(segmentMap, arch.Object, platform.Object); this.program.ImageMap = imageMap; }
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); }
private void ImageMap_OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e) { ImageMap.ReleaseMouseCapture(); }
/// <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 }
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; }
public override abstract IEnumerable <Address> CreatePointerScanner( ImageMap map, ImageReader rdr, IEnumerable <Address> addrs, PointerScannerFlags flags);
public IEnumerable<Address> CreatePointerScanner( ImageMap imageMap, ImageReader rdr, IEnumerable<Address> address, PointerScannerFlags pointerScannerFlags) { return Architecture.CreatePointerScanner(imageMap, rdr, address, pointerScannerFlags); }
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)); }
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); }
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); }
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); } } } }
public override IEnumerable <Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags) { return(mode.CreateInstructionScanner(map, rdr, knownAddresses, flags)); }
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); }
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); }
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); }
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>(); }
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))); }
public abstract IEnumerable<Address> CreateInstructionScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags);
/// <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; } }
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; } }
public IEnumerable <Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable <Address> knownAddresses, PointerScannerFlags flags) { throw new NotImplementedException(); }
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); } }
public BitmapTransformer(ImageMap map, ISendableColor sendable) { Map = map; Sendable = sendable; }
public IEnumerable<Address> CreatePointerScanner(ImageMap map, ImageReader rdr, IEnumerable<Address> knownAddresses, PointerScannerFlags flags) { throw new NotImplementedException(); }
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; } } }