public void DisassembleFile(string outputfile)
        {
            bool _skipDisassembly = false;

            if (File.Exists(outputfile))
            {
                if (MessageBox.Show("Assemblerfile already exists, do you want to redo the disassembly?", "Question", MessageBoxButtons.YesNo) == DialogResult.No)
                {
                    _skipDisassembly = true;
                }
            }
            if (!_skipDisassembly)
            {
                Disassembler disasm = new Disassembler();
                disasm.onProgress += new Disassembler.Progress(disasm_onProgress);
                logger.Debug("Starting disassembly");
                disasm.DisassembleFile(_trionicFile, _trionicFile.FileName, outputfile, _trionicFile.Symbol_collection);
                logger.Debug("Done disassembling: " + disasm.Mnemonics.Count.ToString());
                using (StreamWriter sw = new StreamWriter(outputfile))
                {
                    foreach (MNemonicHelper helper in disasm.Mnemonics)
                    {
                        if (helper.Mnemonic.Contains(":"))
                        {
                            //listBox1.Items.Add(helper.Mnemonic);
                            if (!helper.Mnemonic.Contains("LBL_"))
                            {
                                sw.WriteLine();
                            }
                            sw.WriteLine(helper.Mnemonic);
                        }
                        else
                        {
                            //listBox1.Items.Add(helper.Address.ToString("X8") + " " + helper.Mnemonic);
                            sw.WriteLine("0x" + helper.Address.ToString("X8") + "\t" + helper.Mnemonic);
                        }
                    }
                }
                // start the external viewer with the file
            }
            LoadFile(outputfile);
            string copyFile = _trionicFile.FileName + DateTime.Now.Ticks.ToString();
            File.Copy(_trionicFile.FileName, copyFile);
            LoadBinaryFile(copyFile, _trionicFile.Symbol_collection);
        }
Example #2
0
 private void btnShowFullDisassembly_ItemClick(object sender, ItemClickEventArgs e)
 {
     string outputfile = Path.GetDirectoryName(m_currentfile);
     outputfile = Path.Combine(outputfile, Path.GetFileNameWithoutExtension(m_currentfile) + "_full.asm");
     if (!AssemblerViewerActive(true, outputfile))
     {
         frmProgress progress = new frmProgress();
         progress.Show();
         progress.SetProgress("Start disassembler");
         if (!File.Exists(outputfile))
         {
             progress.SetProgress("Disassembler running...");
             Disassembler dis = new Disassembler();
             dis.DisassembleFileRtf(m_currentfile, outputfile, m_currentfile_size, m_symbols);
             progress.SetProgress("Disassembler done...");
         }
         progress.SetProgress("Loading assembler file");
         StartAssemblerViewer(outputfile, progress);
         progress.Close();
     }
 }
 void disasm_onProgress(object sender, Disassembler.ProgressEventArgs e)
 {
     switch (e.Type)
     {
         case Disassembler.ProgressType.DisassemblingVectors:
             toolStripProgressBar1.Value = e.Percentage;
             break;
         case Disassembler.ProgressType.DisassemblingFunctions:
             toolStripStatusLabel3.Text = e.Percentage.ToString("D3") + " functions disassembled";
             break;
         case Disassembler.ProgressType.TranslatingVectors:
         case Disassembler.ProgressType.TranslatingLabels:
         case Disassembler.ProgressType.SortingData:
             if (e.Percentage <= toolStripProgressBar2.Maximum)
             {
                 toolStripProgressBar2.Value = e.Percentage;
             }
             break;
     }
     Application.DoEvents();
 }