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); }
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(); }