예제 #1
0
        public void DecSvc_DecompilerProjectName()
        {
            IDecompilerService svc = new DecompilerService();
            var loader             = mr.StrictMock <ILoader>();
            var host     = mr.StrictMock <DecompilerHost>();
            var arch     = mr.StrictMock <IProcessorArchitecture>();
            var platform = mr.StrictMock <Platform>(sc, arch);
            var fileName = "foo\\bar\\baz.exe";
            var bytes    = new byte[100];
            var image    = new LoadedImage(Address.Ptr32(0x1000), bytes);
            var imageMap = image.CreateImageMap();
            var prog     = new Program(image, imageMap, arch, platform);

            loader.Stub(l => l.LoadImageBytes(fileName, 0)).Return(bytes);
            loader.Stub(l => l.LoadExecutable(fileName, bytes, null)).Return(prog);
            loader.Replay();
            var dec = new DecompilerDriver(loader, host, sc);

            mr.ReplayAll();

            svc.Decompiler = dec;
            svc.Decompiler.Load(fileName);

            Assert.IsNotNull(svc.Decompiler.Project);
            Assert.AreEqual("baz.exe", svc.ProjectName, "Should have project name available.");
            mr.VerifyAll();
        }
예제 #2
0
        public void Execute(string[] args)
        {
            var pArgs = ProcessArguments(Console.Out, args);
            if (pArgs == null)
                return;

            var ldr = new Loader(services);
            object defaultTo;
            if (pArgs.TryGetValue("--default-to", out defaultTo))
            {
                ldr.DefaultToFormat = (string)defaultTo;
            }
            var dec = new DecompilerDriver(ldr, services);

            if (OverridesRequested(pArgs))
            {
                DecompileRawImage(dec, pArgs);
            }
            else if (pArgs.ContainsKey("filename"))
            {
                dec.Decompile((string)pArgs["filename"]);
            }
            else
            {
                Usage(Console.Out);
            }
        }
예제 #3
0
        public void DecSvc_DecompilerProjectName()
        {
            IDecompilerService svc = new DecompilerService();
            var loader             = mr.StrictMock <ILoader>();
            var host     = mr.StrictMock <DecompilerHost>();
            var arch     = mr.StrictMock <IProcessorArchitecture>();
            var platform = mr.StrictMock <IPlatform>();
            var fileName = "foo\\bar\\baz.exe";
            var bytes    = new byte[100];
            var mem      = new MemoryArea(Address.Ptr32(0x1000), bytes);
            var imageMap = new ImageMap(
                mem.BaseAddress,
                new ImageSegment("code", mem, AccessMode.ReadWriteExecute));
            var prog = new Program(imageMap, arch, platform);

            sc.AddService <DecompilerHost>(host);
            platform.Stub(p => p.CreateMetadata()).Return(new TypeLibrary());
            loader.Stub(l => l.LoadImageBytes(fileName, 0)).Return(bytes);
            loader.Stub(l => l.LoadExecutable(fileName, bytes, null)).Return(prog);
            loader.Replay();
            var dec = new DecompilerDriver(loader, sc);

            mr.ReplayAll();

            svc.Decompiler = dec;
            svc.Decompiler.Load(fileName);

            Assert.IsNotNull(svc.Decompiler.Project);
            Assert.AreEqual("baz.exe", svc.ProjectName, "Should have project name available.");
            mr.VerifyAll();
        }
예제 #4
0
        public static void Main(string [] args)
        {
            var services = new ServiceContainer();

            if (args.Length == 0)
            {
                services.AddService(typeof(IServiceFactory), new ServiceFactory(services));
                services.AddService(typeof(IDialogFactory), new WindowsFormsDialogFactory(services));
                services.AddService(typeof(IRegistryService), new WindowsFormsRegistryService());
                services.AddService(typeof(ISettingsService), new WindowsFormsSettingsService(services));
                var interactor = new MainFormInteractor(services);
                interactor.Run();
            }
            else
            {
                var listener = NullDecompilerEventListener.Instance;

                services.AddService(typeof(DecompilerEventListener), listener);
                services.AddService(typeof(IRegistryService), new WindowsFormsRegistryService());
                services.AddService(typeof(IConfigurationService), RekoConfigurationService.Load());
                var ldr = new Loader(services);
                var dec = new DecompilerDriver(ldr, services);
                dec.Decompile(args[0]);
            }
        }
예제 #5
0
        public void DecSvc_DecompilerProjectName()
        {
            IDecompilerService svc = new DecompilerService();
            var loader             = new Mock <ILoader>();
            var host = new Mock <IDecompiledFileService>();
            var arch = new Mock <IProcessorArchitecture>();

            arch.Setup(a => a.Name).Returns("FakeArch");
            var platform = new Mock <IPlatform>();
            var fileName = OsPath.Relative("foo", "bar", "baz.exe");
            var bytes    = new byte[100];
            var mem      = new MemoryArea(Address.Ptr32(0x1000), bytes);
            var imageMap = new SegmentMap(
                mem.BaseAddress,
                new ImageSegment("code", mem, AccessMode.ReadWriteExecute));
            var program = new Program(imageMap, arch.Object, platform.Object);

            sc.AddService <IDecompiledFileService>(host.Object);
            platform.Setup(p => p.CreateMetadata()).Returns(new TypeLibrary());
            loader.Setup(l => l.LoadImageBytes(fileName, 0)).Returns(bytes);
            loader.Setup(l => l.LoadExecutable(fileName, bytes, null, null)).Returns(program);
            var dec = new DecompilerDriver(loader.Object, sc);

            svc.Decompiler = dec;
            svc.Decompiler.Load(fileName);

            Assert.IsNotNull(svc.Decompiler.Project);
            Assert.AreEqual("baz.exe", svc.ProjectName, "Should have project name available.");
        }
예제 #6
0
        private void DecompileAssembler(string asmLabel, Address loadAddress)
        {
            var cfg    = RekoConfigurationService.Load();
            var asm    = cfg.GetAssembler(asmLabel);
            var prog   = asm.AssembleFragment(loadAddress, txtAssembler.Text + Environment.NewLine);
            var sc     = new ServiceContainer();
            var loader = new Loader(sc);
            DecompilerDriver decomp = new DecompilerDriver(loader, sc);
            var proj = new Project {
                Programs =
                {
                    prog
                }
            };

            decomp.Project = proj;
            decomp.ScanPrograms();
            decomp.AnalyzeDataFlow();
            decomp.ReconstructTypes();
            decomp.StructureProgram();
            decomp.WriteDecompilerProducts();

            plcOutput.Text     = host.DisassemblyWriter.ToString();
            plcDecompiled.Text = host.DecompiledCodeWriter.ToString();
        }
예제 #7
0
        public void DecSvc_DecompilerProjectName()
        {
            IDecompilerService svc = new DecompilerService();
            var loader = mr.StrictMock<ILoader>();
            var host = mr.StrictMock<DecompilerHost>();
            var arch = mr.StrictMock<IProcessorArchitecture>();
            var platform = mr.StrictMock<Platform>(sc, arch);
            var fileName = "foo\\bar\\baz.exe";
            var bytes = new byte[100];
            var image = new LoadedImage(Address.Ptr32(0x1000), bytes);
            var imageMap = image.CreateImageMap();
            var prog = new Program(image, imageMap, arch, platform);
            sc.AddService<DecompilerHost>(host);
            loader.Stub(l => l.LoadImageBytes(fileName, 0)).Return(bytes);
            loader.Stub(l => l.LoadExecutable(fileName, bytes, null)).Return(prog);
            loader.Replay();
            var dec = new DecompilerDriver(loader, sc);
            mr.ReplayAll();

            svc.Decompiler = dec;
            svc.Decompiler.Load(fileName);

            Assert.IsNotNull(svc.Decompiler.Project);
            Assert.AreEqual("baz.exe",  svc.ProjectName, "Should have project name available.");
            mr.VerifyAll();
        }
예제 #8
0
		public static void Main(string [] args)
		{
            var services = new ServiceContainer();
            if (args.Length == 0)
			{
                services.AddService(typeof(IServiceFactory), new ServiceFactory(services));
                services.AddService(typeof(IDialogFactory), new WindowsFormsDialogFactory(services));
                services.AddService(typeof(IRegistryService), new WindowsFormsRegistryService());
                services.AddService(typeof(ISettingsService), new WindowsFormsSettingsService(services));
                var interactor = new MainFormInteractor(services);
                interactor.Run();
            }
			else
			{
                var host = NullDecompilerHost.Instance;
                var listener = NullDecompilerEventListener.Instance;

                services.AddService(typeof (DecompilerEventListener), listener);
                services.AddService(typeof(IRegistryService), new WindowsFormsRegistryService());
                services.AddService(typeof(IConfigurationService), new DecompilerConfiguration());
                var ldr = new Loader(services);
				var dec = new DecompilerDriver(ldr, services);
				dec.Decompile(args[0]);
			}
		}
예제 #9
0
        public void Execute(string[] args)
        {
            var pArgs = ProcessArguments(Console.Out, args);

            if (pArgs == null)
            {
                return;
            }

            var    ldr = new Loader(services);
            object defaultTo;

            if (pArgs.TryGetValue("--default-to", out defaultTo))
            {
                ldr.DefaultToFormat = (string)defaultTo;
            }
            var dec = new DecompilerDriver(ldr, services);

            if (OverridesRequested(pArgs))
            {
                DecompileRawImage(dec, pArgs);
            }
            else if (pArgs.ContainsKey("filename"))
            {
                dec.Decompile((string)pArgs["filename"]);
            }
            else
            {
                Usage(Console.Out);
            }
        }
예제 #10
0
        private void DecompileRawImage(DecompilerDriver dec, Dictionary <string, object> pArgs)
        {
            var arch = config.GetArchitecture((string)pArgs["--arch"]);

            if (arch == null)
            {
                throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"]));
            }

            object   sEnv;
            Platform platform;

            if (pArgs.TryGetValue("--env", out sEnv))
            {
                var opEnv = config.GetEnvironment((string)sEnv);
                if (opEnv == null)
                {
                    throw new ApplicationException(string.Format("Unknown operating environment {0}", sEnv));
                }
                platform = opEnv.Load(services, arch);
            }
            else
            {
                platform = new DefaultPlatform(services, arch);
            }

            Address addrBase;
            Address addrEntry;

            if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase))
            {
                throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
            }
            if (pArgs.ContainsKey("--entry"))
            {
                if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry))
                {
                    throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
                }
            }
            else
            {
                addrEntry = addrBase;
            }


            var state = CreateInitialState(arch, pArgs);

            dec.LoadRawImage((string)pArgs["filename"], arch, platform, addrBase);
            dec.Project.Programs[0].EntryPoints.Add(new EntryPoint(addrEntry, state));
            dec.ScanPrograms();
            dec.AnalyzeDataFlow();
            dec.ReconstructTypes();
            dec.StructureProgram();
            dec.WriteDecompilerProducts();
        }
예제 #11
0
        private void DecompileRawImage(DecompilerDriver dec, Dictionary <string, object> pArgs)
        {
            var arch = config.GetArchitecture((string)pArgs["--arch"]);

            if (arch == null)
            {
                throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"]));
            }

            object sEnv;

            pArgs.TryGetValue("--env", out sEnv);

            Address addrBase;
            Address addrEntry;

            if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase))
            {
                throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
            }
            if (pArgs.ContainsKey("--entry"))
            {
                if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry))
                {
                    throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
                }
            }
            else
            {
                addrEntry = addrBase;
            }


            var state = CreateInitialState(arch, pArgs);

            dec.LoadRawImage((string)pArgs["filename"], (string)pArgs["--arch"], (string)sEnv, addrBase);
            dec.Project.Programs[0].EntryPoints.Add(
                addrEntry,
                new ImageSymbol(addrEntry)
            {
                ProcessorState = state
            });
            object oHeur;

            if (pArgs.TryGetValue("heuristics", out oHeur))
            {
                dec.Project.Programs[0].User.Heuristics = ((string[])oHeur).ToSortedSet();
            }
            dec.ScanPrograms();
            dec.AnalyzeDataFlow();
            dec.ReconstructTypes();
            dec.StructureProgram();
            dec.WriteDecompilerProducts();
        }
예제 #12
0
        public void Setup()
        {
            fsSvc = new Mock <IFileSystemService>();
            var cfgSvc = new Mock <IConfigurationService>();
            var tlSvc  = new Mock <ITypeLibraryLoaderService>();
            var host   = new FakeDecompiledFileService();

            sc     = new ServiceContainer();
            loader = new Mock <ILoader>();
            sc.AddService <DecompilerEventListener>(new FakeDecompilerEventListener());
            sc.AddService <IFileSystemService>(new FileSystemServiceImpl());
            sc.AddService <IDecompiledFileService>(host);
            sc.AddService <IConfigurationService>((IConfigurationService)cfgSvc.Object);
            sc.AddService <ITypeLibraryLoaderService>(tlSvc.Object);
            decompiler = new DecompilerDriver(loader.Object, sc);
        }
예제 #13
0
        public void DecSvc_NotifyOnChangedDecompiler()
        {
            var loader = mr.Stub<ILoader>();
            var host = mr.Stub<DecompilerHost>();
            mr.ReplayAll();

            DecompilerDriver d = new DecompilerDriver(loader, host, sc);
            bool decompilerChangedEventFired = true;
            svc.DecompilerChanged += delegate(object o, EventArgs e)
            {
                decompilerChangedEventFired = true;
            };

            svc.Decompiler = d;

            Assert.IsTrue(decompilerChangedEventFired, "Should have fired a change event");
        }
예제 #14
0
        public static void Main(string[] args)
        {
            var services      = new ServiceContainer();
            var listener      = new CmdLineListener();
            var config        = RekoConfigurationService.Load();
            var diagnosticSvc = new CmdLineDiagnosticsService(Console.Out);

            services.AddService <DecompilerEventListener>(listener);
            services.AddService <IConfigurationService>(config);
            services.AddService <ITypeLibraryLoaderService>(new TypeLibraryLoaderServiceImpl(services));
            services.AddService <IDiagnosticsService>(diagnosticSvc);
            services.AddService <IFileSystemService>(new FileSystemServiceImpl());
            services.AddService <DecompilerHost>(new CmdLineHost());
            var ldr        = new Loader(services);
            var decompiler = new DecompilerDriver(ldr, services);
            var driver     = new CmdLineDriver(services, ldr, decompiler, listener);

            driver.Execute(args);
        }
예제 #15
0
        public void DecSvc_NotifyOnChangedDecompiler()
        {
            var loader = new Mock <ILoader>();
            var host   = new Mock <IDecompiledFileService>();

            sc.AddService <IDecompiledFileService>(host.Object);

            DecompilerDriver d = new DecompilerDriver(loader.Object, sc);
            bool             decompilerChangedEventFired = true;

            svc.DecompilerChanged += delegate(object o, EventArgs e)
            {
                decompilerChangedEventFired = true;
            };

            svc.Decompiler = d;

            Assert.IsTrue(decompilerChangedEventFired, "Should have fired a change event");
        }
예제 #16
0
        public void DecSvc_NotifyOnChangedDecompiler()
        {
            var loader = mr.Stub <ILoader>();
            var host   = mr.Stub <DecompilerHost>();

            mr.ReplayAll();

            DecompilerDriver d = new DecompilerDriver(loader, host, sc);
            bool             decompilerChangedEventFired = true;

            svc.DecompilerChanged += delegate(object o, EventArgs e)
            {
                decompilerChangedEventFired = true;
            };

            svc.Decompiler = d;

            Assert.IsTrue(decompilerChangedEventFired, "Should have fired a change event");
        }
예제 #17
0
        private void DecompileC()
        {
            string tmpName = Guid.NewGuid().ToString();
            string tmpDir  = Server.MapPath("tmp");
            string cFile   = Path.Combine(tmpDir, tmpName + ".c");
            string asmFile = Path.Combine(tmpDir, tmpName + ".asm");

            try
            {
                CopyCSourceToTempFile(txtAssembler.Text, cFile);
                if (CompileCFile(tmpDir, cFile))
                {
                    var sc                  = new ServiceContainer();
                    var ldr                 = new Loader(sc);
                    var cfg                 = RekoConfigurationService.Load();
                    var asm                 = cfg.GetAssembler("x86-masm");
                    var program             = asm.AssembleFragment(Address.Ptr32(0x10000000), txtAssembler.Text + Environment.NewLine);
                    DecompilerDriver decomp = new DecompilerDriver(ldr, sc);
                    var project             = new Project
                    {
                        Programs = { program }
                    };
                    decomp.Project = project;
                    decomp.ScanPrograms();
                    decomp.AnalyzeDataFlow();
                    decomp.ReconstructTypes();
                    decomp.StructureProgram();
                    decomp.WriteDecompilerProducts();

                    plcOutput.Text     = host.DisassemblyWriter.ToString();
                    plcDecompiled.Text = host.DecompiledCodeWriter.ToString();
                }
            }
            finally
            {
                if (File.Exists(asmFile))
                {
                    File.Delete(asmFile);
                }
            }
        }
예제 #18
0
        private void DecompileAssembler(string asmLabel, Address loadAddress)
        {
            var cfg = new DecompilerConfiguration();
            var asm = cfg.GetAssembler(asmLabel);
            var prog = asm.AssembleFragment(loadAddress, txtAssembler.Text + Environment.NewLine);
            var sc = new ServiceContainer();
            var loader = new Loader(sc);
            DecompilerDriver decomp = new DecompilerDriver(loader, sc);
            var proj = new Project {
                Programs = {
                    prog
                }
            };
            decomp.Project = proj;
            decomp.ScanPrograms();
            decomp.AnalyzeDataFlow();
            decomp.ReconstructTypes();
            decomp.StructureProgram();
            decomp.WriteDecompilerProducts();

            plcOutput.Text = host.DisassemblyWriter.ToString();
            plcDecompiled.Text = host.DecompiledCodeWriter.ToString();
        }
예제 #19
0
        private void DecompileRawImage(DecompilerDriver dec, Dictionary<string, object> pArgs)
        {
            var arch = config.GetArchitecture((string)pArgs["--arch"]);
            if (arch == null)
                throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"]));

            object sEnv;
            Platform platform;
            if (pArgs.TryGetValue("--env", out sEnv))
            {
                var opEnv = config.GetEnvironment((string)sEnv);
                if (opEnv == null)
                    throw new ApplicationException(string.Format("Unknown operating environment {0}", sEnv));
                platform = opEnv.Load(services, arch);
            }
            else
            {
                platform = new DefaultPlatform(services, arch);
            }

            Address addrBase;
            Address addrEntry;
            if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase))
                throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
            if (pArgs.ContainsKey("--entry"))
            {
                if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry))
                    throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
            }
            else
                addrEntry = addrBase;


            var state = CreateInitialState(arch, pArgs);
            dec.LoadRawImage((string)pArgs["filename"], arch, platform, addrBase);
            dec.Project.Programs[0].EntryPoints.Add(new EntryPoint(addrEntry, state));
            dec.ScanPrograms();
            dec.AnalyzeDataFlow();
            dec.ReconstructTypes();
            dec.StructureProgram();
            dec.WriteDecompilerProducts();
        }
예제 #20
0
 public TestMainFormInteractor(DecompilerDriver decompiler, IServiceProvider sp)
     : base(sp)
 {
     this.decompiler = decompiler;
 }
예제 #21
0
        public void DecSvc_DecompilerProjectName()
        {
            IDecompilerService svc = new DecompilerService();
            var loader = mr.StrictMock<ILoader>();
            var host = mr.StrictMock<DecompilerHost>();
            var arch = mr.StrictMock<IProcessorArchitecture>();
            var platform = mr.StrictMock<IPlatform>();
            var fileName = OsPath.Relative("foo", "bar", "baz.exe");
            var bytes = new byte[100];
            var mem = new MemoryArea(Address.Ptr32(0x1000), bytes);
            var imageMap = new SegmentMap(
                    mem.BaseAddress,
                    new ImageSegment("code", mem, AccessMode.ReadWriteExecute));
            var prog = new Program(imageMap, arch, platform);
            sc.AddService<DecompilerHost>(host);
            platform.Stub(p => p.CreateMetadata()).Return(new TypeLibrary());
            loader.Stub(l => l.LoadImageBytes(fileName, 0)).Return(bytes);
            loader.Stub(l => l.LoadExecutable(fileName, bytes, null)).Return(prog);
            loader.Replay();
            var dec = new DecompilerDriver(loader, sc);
            mr.ReplayAll();

            svc.Decompiler = dec;
            svc.Decompiler.Load(fileName);

            Assert.IsNotNull(svc.Decompiler.Project);
            Assert.AreEqual("baz.exe",  svc.ProjectName, "Should have project name available.");
            mr.VerifyAll();
        }
예제 #22
0
        private void DecompileRawImage(DecompilerDriver dec, Dictionary<string, object> pArgs)
        {
            var arch = config.GetArchitecture((string)pArgs["--arch"]);
            if (arch == null)
                throw new ApplicationException(string.Format("Unknown architecture {0}", pArgs["--arch"]));

            object sEnv;
            pArgs.TryGetValue("--env", out sEnv);

            Address addrBase;
            Address addrEntry;
            if (!arch.TryParseAddress((string)pArgs["--base"], out addrBase))
                throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
            if (pArgs.ContainsKey("--entry"))
            {
                if (!arch.TryParseAddress((string)pArgs["--base"], out addrEntry))
                    throw new ApplicationException(string.Format("'{0}' doesn't appear to be a valid address.", pArgs["--base"]));
            }
            else
                addrEntry = addrBase;


            var state = CreateInitialState(arch, pArgs);
            dec.LoadRawImage((string)pArgs["filename"], (string)pArgs["--arch"], (string) sEnv, addrBase);
            dec.Project.Programs[0].EntryPoints.Add(
                addrEntry,
                new ImageSymbol(addrEntry)
                {
                    ProcessorState = state
                });
            object oHeur;
            if (pArgs.TryGetValue("heuristics", out oHeur))
            {
                dec.Project.Programs[0].User.Heuristics = ((string[])oHeur).ToSortedSet();
            }
            dec.ScanPrograms();
            dec.AnalyzeDataFlow();
            dec.ReconstructTypes();
            dec.StructureProgram();
            dec.WriteDecompilerProducts();
        }
예제 #23
0
		private void DecompileC()
		{
			string tmpName = Guid.NewGuid().ToString();
			string tmpDir = Server.MapPath("tmp");
			string cFile = Path.Combine(tmpDir, tmpName + ".c");
			string asmFile = Path.Combine(tmpDir, tmpName + ".asm");
			try
			{
				CopyCSourceToTempFile(txtAssembler.Text, cFile);
				if (CompileCFile(tmpDir, cFile))
				{
                    var sc = new ServiceContainer();
                    var ldr = new Loader(sc);
                    var cfg = new DecompilerConfiguration();
                    var asm = cfg.GetAssembler("x86-masm");
                    var program = asm.AssembleFragment(Address.Ptr32(0x10000000), txtAssembler.Text + Environment.NewLine);
					DecompilerDriver decomp = new DecompilerDriver(ldr, sc);
					var project = new Project
                    {
                        Programs = { program }
                    };
                    decomp.Project = project;
                    decomp.ScanPrograms();
                    decomp.AnalyzeDataFlow();
                    decomp.ReconstructTypes();
                    decomp.StructureProgram();
                    decomp.WriteDecompilerProducts();

					plcOutput.Text = host.DisassemblyWriter.ToString();
					plcDecompiled.Text = host.DecompiledCodeWriter.ToString();
				}
			} 
			finally
			{
				if (File.Exists(asmFile))
					File.Delete(asmFile);
			}
		}