DisassembleInstruction() public method

public DisassembleInstruction ( Method method, TargetAddress address ) : AssemblerLine
method Method
address TargetAddress
return AssemblerLine
示例#1
0
        public override AssemblyLine[] GetLines(long startAddr, long endAddr)
        {
            List <AssemblyLine> lines = new List <AssemblyLine> ();

            MD.TargetAddress addr = baseAddr + (startAddr - baseAddr.Address);
            while (addr.Address <= endAddr)
            {
                try {
                    MD.AssemblerLine line = thread.DisassembleInstruction(null, addr);
                    lines.Add(new AssemblyLine(addr.Address, line.Text));
                    addr += line.InstructionSize;
                } catch {
                    Console.WriteLine("failed " + addr.Address);
                    lines.Add(new AssemblyLine(addr.Address, "??"));
                    addr++;
                }
            }
            return(lines.ToArray());
        }
示例#2
0
文件: Style.cs 项目: baulig/debugger
        protected void TargetEvent(Thread target, StackFrame frame,
					    TargetEventArgs args)
        {
            switch (args.Type) {
            case TargetEventType.TargetStopped: {
                if ((int) args.Data != 0)
                    interpreter.Print ("{0} received signal {1} at {2}.",
                               target.Name, (int) args.Data, frame);
                else if (!interpreter.IsInteractive)
                    break;
                else
                    interpreter.Print ("{0} stopped at {1}.", target.Name, frame);

                if (interpreter.IsScript)
                    break;

                AssemblerLine insn;
                try {
                    insn = target.DisassembleInstruction (
                        frame.Method, frame.TargetAddress);
                } catch {
                    insn = null;
                }

                interpreter.Style.TargetStopped (interpreter, frame, insn);

                break;
            }

            case TargetEventType.TargetHitBreakpoint: {
                if (!interpreter.IsInteractive)
                    break;

                interpreter.Print ("{0} hit breakpoint {1} at {2}.",
                           target.Name, (int) args.Data, frame);

                if (interpreter.IsScript)
                    break;

                AssemblerLine insn;
                try {
                    insn = target.DisassembleInstruction (
                        frame.Method, frame.TargetAddress);
                } catch {
                    insn = null;
                }

                interpreter.Style.TargetStopped (interpreter, frame, insn);

                break;
            }

            case TargetEventType.Exception:
            case TargetEventType.UnhandledException: {
                interpreter.Print ("{0} caught {2}exception at {1}.", target.Name, frame,
                           args.Type == TargetEventType.Exception ?
                           "" : "unhandled ");

                if (interpreter.IsScript)
                    break;

                AssemblerLine insn;
                try {
                    insn = target.DisassembleInstruction (
                        frame.Method, frame.TargetAddress);
                } catch {
                    insn = null;
                }

                interpreter.Style.UnhandledException (interpreter, frame, insn);

                break;
            }
            }
        }