示例#1
0
文件: Dis.cs 项目: 7shi/Sirius
 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];
 }
示例#2
0
        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();
        }