private void ProcessJumpTable(uint jtOffset) { var j = new JumpTable(); ImageReader ir = new BeImageReader(image, jtOffset); j.AboveA5Size = ir.ReadBeUInt32(); j.BelowA5Size = ir.ReadBeUInt32(); j.JumpTableSize = ir.ReadBeUInt32(); j.JumpTableOffset = ir.ReadBeUInt32(); uint size = j.JumpTableSize; while (size > 0) { JumpTableEntry jte = new JumpTableEntry(); jte.RoutineOffsetFromSegmentStart = ir.ReadBeUInt16(); jte.Instruction = ir.ReadBeUInt32(); jte.LoadSegTrapNumber = ir.ReadBeUInt16(); Debug.WriteLine(string.Format("Jump table entry: {0:x2} {1:X4} {2:X2}", jte.RoutineOffsetFromSegmentStart, jte.Instruction, jte.LoadSegTrapNumber)); size -= 8; } }
private JumpTable ProcessJumpTable(MemoryArea memJt, IDictionary <Address, ImageSymbol> symbols) { var j = new JumpTable(); var ir = memJt.CreateBeReader(0); j.AboveA5Size = ir.ReadBeUInt32(); j.BelowA5Size = ir.ReadBeUInt32(); j.JumpTableSize = ir.ReadBeUInt32(); j.JumpTableOffset = ir.ReadBeUInt32(); uint size = j.JumpTableSize; while (size > 0) { JumpTableEntry jte = new JumpTableEntry(); var addr = ir.Address; jte.RoutineOffsetFromSegmentStart = ir.ReadBeUInt16(); jte.Instruction = ir.ReadBeUInt32(); jte.LoadSegTrapNumber = ir.ReadBeUInt16(); j.Entries.Add(jte); Debug.Print("{0}", jte); size -= 8; } return(j); }