public Alpha(ELF64 elf, byte[] data) { this.elf = elf; InitMemory(data); text_code = new uint[elf.Text.sh_size >> 2]; text_op = new Op[text_code.Length]; }
private void ReadElf(Stream s) { var sb1 = new StringBuilder(); var sb2 = new StringBuilder(); var sb4 = new StringBuilder(); var sbx = sb1; var msg = "読み込みに失敗しました。"; try { data = new byte[s.Length]; s.Read(data, 0, data.Length); btnSave.IsEnabled = true; var elf = new ELF64(); using (var ms = new MemoryStream(data)) using (var br = new BinaryReader(ms)) elf.Read(sbx, br); sbx = sb2; msg = "逆アセンブルに失敗しました。"; if (elf.e_machine != ELF.EM_ALPHA_EXP) throw new Exception("Alpha以外はサポートされていません。"); var alpha = new Alpha(elf, data); alpha.Disassemble(sbx); sbx = sb4; msg = "実行に失敗しました。"; alpha.Exec(sbx); } catch (Exception ex) { sbx.AppendLine(ex.Message); sbx.AppendLine(msg); } textBox1.Text = sb1.ToString(); textBox2.Text = sb2.ToString(); textBox4.Text = sb4.ToString(); }