C# 클래스 Mono.Debugger.Backend.SingleSteppingEngine

The single stepping engine is responsible for doing all the stepping operations. sse - short for single stepping engine. stepping operation - an operation which has been invoked by the user such as StepLine(), NextLine() etc. atomic operation - an operation which the sse invokes on the target such as stepping one machine instruction or resuming the target until a breakpoint is hit. step frame - an address range; the sse invokes atomic operations until the target hit a breakpoint, received a signal or stopped at an address outside this range. temporary breakpoint - a breakpoint which is automatically removed the next time the target stopped; it is used to step over method calls. source stepping op - stepping operation based on the program's source code, such as StepLine() or NextLine(). native stepping op - stepping operation based on the machine code such as StepInstruction() or NextInstruction(). The SingleSteppingEngine supports both synchronous and asynchronous operations; in synchronous mode, the engine waits until the child has stopped before returning. In either case, the step commands return true on success and false an error. Since the SingleSteppingEngine can be used from multiple threads at the same time, you can no longer safely use the `State' property to find out whether the target is stopped or not. It is safe to call all the step commands from multiple threads, but for obvious reasons only one command can run at a time. So if you attempt to issue a step command while the engine is still busy, the step command will return false to signal this error. The ThreadManager creates one SingleSteppingEngine instance for each thread in the target. The `SingleSteppingEngine' class is basically just responsible for whatever happens in the background thread: processing commands and events. Their methods are just meant to be called from the SingleSteppingEngine (since it's a protected nested class they can't actually be called from anywhere else). See the `Thread' class for the "user interface".
상속: ThreadServant
파일 보기 프로젝트 열기: baulig/debugger 1 사용 예제들

보호된 프로퍼티들

프로퍼티 타입 설명
current_backtrace Backtrace
current_frame System.Diagnostics.StackFrame
current_method Method
registers Registers

Private Properties

프로퍼티 타입 설명
AbortInvocation void
AbortRuntimeInvoke OperationRuntimeInvoke
AcquireThreadLock void
ActivatePendingBreakpoints bool
CreateStepFrame StepFrame
CreateStepFrame StepFrame
DetachThread void
DoTargetAccess object
GetCallbackFrame Inferior.CallbackFrame
GetRuntimeInvokedFunction Mono.Debugger.Languages.TargetFunctionType
InitializeBreakpoints bool
InsertBreakpoint void
Invoke object
Old_Step ThreadCommandResult
OnExecd CommandResult
OnManagedCallback bool
OnManagedThreadCreated void
OnManagedThreadExited void
OnModuleLoaded bool
OnThreadExited void
ProcessOperation CommandResult
ReleaseThreadLock void
ReleaseThreadLock void
RemoveBreakpoint void
ResumeUserThread void
SendCommand object
SetMainReturnAddress void
SetManagedThreadData void
SetTID void
StartOperation CommandResult
SuspendUserThread void
check_method_operation System.Operation
check_runtime_version bool
child_breakpoint bool
compute_frame System.Diagnostics.StackFrame
frame_changed System.Operation
handle_exception bool
is_in_step_frame bool
is_managed_frame bool
lookup_breakpoint Breakpoint
save_stack StackData
step_over_breakpoint bool
throw_exception ExceptionAction

공개 메소드들

메소드 설명
CallMethod ( TargetAddress method, TargetAddress method_arg, TargetObject object_arg ) : CommandResult
CallMethod ( TargetAddress method, long arg1, long arg2 ) : CommandResult
CallMethod ( TargetAddress method, long arg1, long arg2, long arg3, string string_argument ) : CommandResult
Detach ( ) : void
DisassembleInstruction ( Method method, TargetAddress address ) : AssemblerLine
DisassembleMethod ( Method method ) : AssemblerMethod
GetBacktrace ( Backtrace mode, int max_frames ) : Backtrace
GetInstructionSize ( TargetAddress address ) : int
GetMemoryMaps ( ) : TargetMemoryArea[]
GetRegisters ( ) : Registers
Kill ( ) : void
Lookup ( TargetAddress address ) : Method
ManagedCallback ( ManagedCallbackFunction func, CommandResult result ) : bool
PrintObject ( Style style, TargetObject obj, DisplayFormat format ) : string
PrintType ( Style style, TargetType type ) : string
ProcessEvent ( Inferior cevent ) : bool
ProcessEvent ( int status ) : void

This is called from the SingleSteppingEngine's main event loop to give us the next event - `status' has no meaning to us, it's just meant to be passed to inferior.ProcessEvent() to get the actual event.

Actually, `status' is the waitpid() status code. In Linux 2.6.x, you can call waitpid() from any thread in the debugger, but we need to get the target's registers to find out whether it's a breakpoint etc. That's done in inferior.ProcessEvent() - which must always be called from the engine's thread.

ReadAddress ( TargetAddress address ) : TargetAddress
ReadBuffer ( TargetAddress address, int size ) : byte[]
ReadByte ( TargetAddress address ) : byte
ReadInteger ( TargetAddress address ) : int
ReadLongInteger ( TargetAddress address ) : long
ReadMemory ( TargetAddress address, int size ) : TargetBlob
ReadString ( TargetAddress address ) : string
Return ( ReturnMode mode ) : CommandResult
RuntimeInvoke ( TargetFunctionType function, TargetStructObject object_argument, TargetObject param_objects, RuntimeInvokeFlags flags, RuntimeInvokeResult result ) : void
SetKilledFlag ( ) : void
SetRegisters ( Registers registers ) : void
SimpleLookup ( TargetAddress address, bool exact_match ) : Symbol
SingleSteppingEngine ( ThreadManager manager, Process process, Inferior inferior, int pid ) : System
SingleSteppingEngine ( ThreadManager manager, Process process, ProcessStart start ) : System
StartApplication ( CommandResult result ) : CommandResult
StartExecedChild ( CommandResult result ) : CommandResult
StartForkedChild ( CommandResult result ) : CommandResult
StartSuspended ( ) : void
StartThread ( CommandResult result ) : CommandResult
Step ( ThreadingModel model, StepMode mode, StepFrame frame ) : CommandResult
Stop ( ) : void
ToString ( ) : string
WriteAddress ( TargetAddress address, TargetAddress value ) : void
WriteBuffer ( TargetAddress address, byte buffer ) : void
WriteByte ( TargetAddress address, byte value ) : void
WriteInteger ( TargetAddress address, int value ) : void
WriteLongInteger ( TargetAddress address, long value ) : void

보호된 메소드들

메소드 설명
CheckTrampoline ( Instruction instruction, TrampolineHandler handler ) : bool
DoAbortInvocation ( long rti_id ) : void
DoDetach ( ) : void
DoDispose ( ) : void
DoProcessEvent ( Inferior cevent ) : void
ExecuteOperation ( System.Operation operation ) : void
MethodHasSource ( Method method ) : bool
OperationCompleted ( TargetEventArgs args ) : void
OperationCompleted ( TargetEventArgs args, bool suspended ) : void
OperationInterrupted ( ) : void
ProcessOperationEvent ( Inferior cevent ) : void
PushOperation ( System.Operation operation ) : void
PushOperationNoExec ( System.Operation operation ) : void
SingleSteppingEngine ( ThreadManager manager, Process process ) : System
StartOperation ( ) : void

Start a new stepping operation. All stepping operations are done asynchronously. The inferior basically just knows two kinds of stepping operations: there is do_continue() to continue execution (until a breakpoint is hit or the target receives a signal or exits) and there is do_step_native() to single-step one machine instruction. There's also a version of do_continue() which takes an address - it inserts a temporary breakpoint on that address and calls do_continue(). Let's call these "atomic operations" while a "stepping operation" is something like stepping until the next source line. We normally need to do several atomic operations for each stepping operation. We start a new stepping operation here, but what we actually do is starting an atomic operation on the target. Note that we just start it, but don't wait until is completed. Once the target is running, we go back to the main event loop and wait for it (or another thread) to stop (or to get another command from the user).

check_inferior ( ) : void
disable_extended_notification ( NotificationType type ) : void
do_continue ( ) : void

Resume the target.

do_continue ( TargetAddress until ) : void
do_next ( ) : void

Step over the next machine instruction.

do_step ( ) : void
do_step_native ( ) : void
enable_extended_notification ( NotificationType type ) : void
enforce_managed_context ( ) : void
frames_invalid ( ) : void
insert_lmf_breakpoint ( TargetAddress lmf_address ) : void
insert_temporary_breakpoint ( TargetAddress address ) : void
remove_lmf_breakpoint ( ) : void
remove_temporary_breakpoint ( ) : void
request_managed_callback ( ManagedCallbackData data ) : void
restore_stack ( StackData stack ) : void
set_registers ( Registers registers ) : void
update_current_frame ( StackFrame new_frame ) : void

비공개 메소드들

메소드 설명
AbortInvocation ( long rti_id ) : void
AbortRuntimeInvoke ( long rti_id ) : OperationRuntimeInvoke
AcquireThreadLock ( ) : void

Interrupt any currently running stepping operation, but don't send any notifications to the caller. The currently running operation is automatically resumed when ReleaseThreadLock() is called.

ActivatePendingBreakpoints ( Module module ) : bool
CreateStepFrame ( ) : StepFrame

Create a step frame to step until the next source line.

CreateStepFrame ( StepMode mode ) : StepFrame

Create a step frame for a native stepping operation.

DetachThread ( ) : void
DoTargetAccess ( TargetAccessHandler func ) : object
GetCallbackFrame ( TargetAddress stack_pointer, bool exact_match ) : Inferior.CallbackFrame
GetRuntimeInvokedFunction ( long ID ) : TargetFunctionType
InitializeBreakpoints ( ) : bool
InsertBreakpoint ( BreakpointHandle handle, TargetAddress address, int domain ) : void
Invoke ( TargetAccessDelegate func, object data ) : object
Old_Step ( StepMode mode, StepFrame frame ) : ThreadCommandResult
OnExecd ( SingleSteppingEngine new_engine ) : CommandResult
OnManagedCallback ( Queue callbacks ) : bool
OnManagedThreadCreated ( TargetAddress end_stack_address ) : void
OnManagedThreadExited ( ) : void
OnModuleLoaded ( Module module ) : bool
OnThreadExited ( Inferior cevent ) : void
ProcessOperation ( System.Operation operation ) : CommandResult
ReleaseThreadLock ( ) : void
ReleaseThreadLock ( Inferior cevent ) : void
RemoveBreakpoint ( BreakpointHandle handle ) : void
ResumeUserThread ( CommandResult result ) : void
SendCommand ( TargetAccessDelegate target ) : object
SetMainReturnAddress ( TargetAddress main_ret ) : void
SetManagedThreadData ( TargetAddress lmf_address, TargetAddress extended_notifications_addr ) : void
SetTID ( long tid ) : void
StartOperation ( System.Operation operation ) : CommandResult
SuspendUserThread ( ) : void
check_method_operation ( TargetAddress address, Method method, SourceAddress source, System.Operation operation ) : System.Operation

Checks whether to do a "method operation". This is only used while doing a source stepping operation and ensures that we don't stop somewhere inside a method's prologue code or between two source lines.

check_runtime_version ( int major, int minor ) : bool
child_breakpoint ( Inferior cevent, int index, Breakpoint &bpt ) : bool

A breakpoint has been hit; now the sse needs to find out what do do: either ignore the breakpoint and continue or keep the target stopped and send out the notification. If @index is zero, we hit an "unknown" breakpoint - ie. a breakpoint which we did not create. Normally, this means that there is a breakpoint instruction (such as G_BREAKPOINT ()) in the code. Such unknown breakpoints are handled by the Debugger; one of the language backends may recognize the breakpoint's address, for instance if this is the JIT's breakpoint trampoline. Returns true if the target should remain stopped and false to continue stepping. If we can't find a handler for the breakpoint, the default is to stop the target and let the user decide what to do.

compute_frame ( TargetAddress address ) : StackFrame
frame_changed ( TargetAddress address, System.Operation operation ) : System.Operation

This is called when a stepping operation is completed or something unexpected happened (received signal etc.). Normally, we just compute the new StackFrame here, but we may also discover that we need to do one more stepping operation, see check_method_operation().

handle_exception ( TargetAddress stack, TargetAddress exc, TargetAddress ip ) : bool
is_in_step_frame ( StepFrame frame, TargetAddress address ) : bool

Check whether @address is inside @frame.

is_managed_frame ( ) : bool
lookup_breakpoint ( int index ) : Breakpoint
save_stack ( long id ) : StackData
step_over_breakpoint ( bool singlestep, TargetAddress until ) : bool
throw_exception ( TargetAddress stack, TargetAddress exc, TargetAddress ip ) : ExceptionAction

메소드 상세

CallMethod() 공개 메소드

public CallMethod ( TargetAddress method, TargetAddress method_arg, TargetObject object_arg ) : CommandResult
method TargetAddress
method_arg TargetAddress
object_arg Mono.Debugger.Languages.TargetObject
리턴 CommandResult

CallMethod() 공개 메소드

public CallMethod ( TargetAddress method, long arg1, long arg2 ) : CommandResult
method TargetAddress
arg1 long
arg2 long
리턴 CommandResult

CallMethod() 공개 메소드

public CallMethod ( TargetAddress method, long arg1, long arg2, long arg3, string string_argument ) : CommandResult
method TargetAddress
arg1 long
arg2 long
arg3 long
string_argument string
리턴 CommandResult

CheckTrampoline() 보호된 메소드

protected CheckTrampoline ( Instruction instruction, TrampolineHandler handler ) : bool
instruction Mono.Debugger.Architectures.Instruction
handler TrampolineHandler
리턴 bool

Detach() 공개 메소드

public Detach ( ) : void
리턴 void

DisassembleInstruction() 공개 메소드

public DisassembleInstruction ( Method method, TargetAddress address ) : AssemblerLine
method Method
address TargetAddress
리턴 AssemblerLine

DisassembleMethod() 공개 메소드

public DisassembleMethod ( Method method ) : AssemblerMethod
method Method
리턴 AssemblerMethod

DoAbortInvocation() 보호된 메소드

protected DoAbortInvocation ( long rti_id ) : void
rti_id long
리턴 void

DoDetach() 보호된 메소드

protected DoDetach ( ) : void
리턴 void

DoDispose() 보호된 메소드

protected DoDispose ( ) : void
리턴 void

DoProcessEvent() 보호된 메소드

protected DoProcessEvent ( Inferior cevent ) : void
cevent Inferior
리턴 void

ExecuteOperation() 보호된 메소드

protected ExecuteOperation ( System.Operation operation ) : void
operation System.Operation
리턴 void

GetBacktrace() 공개 메소드

public GetBacktrace ( Backtrace mode, int max_frames ) : Backtrace
mode Backtrace
max_frames int
리턴 Backtrace

GetInstructionSize() 공개 메소드

public GetInstructionSize ( TargetAddress address ) : int
address TargetAddress
리턴 int

GetMemoryMaps() 공개 메소드

public GetMemoryMaps ( ) : TargetMemoryArea[]
리턴 TargetMemoryArea[]

GetRegisters() 공개 메소드

public GetRegisters ( ) : Registers
리턴 Registers

Kill() 공개 메소드

public Kill ( ) : void
리턴 void

Lookup() 공개 메소드

public Lookup ( TargetAddress address ) : Method
address TargetAddress
리턴 Method

ManagedCallback() 공개 메소드

public ManagedCallback ( ManagedCallbackFunction func, CommandResult result ) : bool
func ManagedCallbackFunction
result CommandResult
리턴 bool

MethodHasSource() 보호된 메소드

protected MethodHasSource ( Method method ) : bool
method Method
리턴 bool

OperationCompleted() 보호된 메소드

protected OperationCompleted ( TargetEventArgs args ) : void
args TargetEventArgs
리턴 void

OperationCompleted() 보호된 메소드

protected OperationCompleted ( TargetEventArgs args, bool suspended ) : void
args TargetEventArgs
suspended bool
리턴 void

OperationInterrupted() 보호된 메소드

protected OperationInterrupted ( ) : void
리턴 void

PrintObject() 공개 메소드

public PrintObject ( Style style, TargetObject obj, DisplayFormat format ) : string
style Style
obj Mono.Debugger.Languages.TargetObject
format DisplayFormat
리턴 string

PrintType() 공개 메소드

public PrintType ( Style style, TargetType type ) : string
style Style
type Mono.Debugger.Languages.TargetType
리턴 string

ProcessEvent() 공개 메소드

public ProcessEvent ( Inferior cevent ) : bool
cevent Inferior
리턴 bool

ProcessEvent() 공개 메소드

This is called from the SingleSteppingEngine's main event loop to give us the next event - `status' has no meaning to us, it's just meant to be passed to inferior.ProcessEvent() to get the actual event.
Actually, `status' is the waitpid() status code. In Linux 2.6.x, you can call waitpid() from any thread in the debugger, but we need to get the target's registers to find out whether it's a breakpoint etc. That's done in inferior.ProcessEvent() - which must always be called from the engine's thread.
public ProcessEvent ( int status ) : void
status int
리턴 void

ProcessOperationEvent() 보호된 메소드

protected ProcessOperationEvent ( Inferior cevent ) : void
cevent Inferior
리턴 void

PushOperation() 보호된 메소드

protected PushOperation ( System.Operation operation ) : void
operation System.Operation
리턴 void

PushOperationNoExec() 보호된 메소드

protected PushOperationNoExec ( System.Operation operation ) : void
operation System.Operation
리턴 void

ReadAddress() 공개 메소드

public ReadAddress ( TargetAddress address ) : TargetAddress
address TargetAddress
리턴 TargetAddress

ReadBuffer() 공개 메소드

public ReadBuffer ( TargetAddress address, int size ) : byte[]
address TargetAddress
size int
리턴 byte[]

ReadByte() 공개 메소드

public ReadByte ( TargetAddress address ) : byte
address TargetAddress
리턴 byte

ReadInteger() 공개 메소드

public ReadInteger ( TargetAddress address ) : int
address TargetAddress
리턴 int

ReadLongInteger() 공개 메소드

public ReadLongInteger ( TargetAddress address ) : long
address TargetAddress
리턴 long

ReadMemory() 공개 메소드

public ReadMemory ( TargetAddress address, int size ) : TargetBlob
address TargetAddress
size int
리턴 TargetBlob

ReadString() 공개 메소드

public ReadString ( TargetAddress address ) : string
address TargetAddress
리턴 string

Return() 공개 메소드

public Return ( ReturnMode mode ) : CommandResult
mode ReturnMode
리턴 CommandResult

RuntimeInvoke() 공개 메소드

public RuntimeInvoke ( TargetFunctionType function, TargetStructObject object_argument, TargetObject param_objects, RuntimeInvokeFlags flags, RuntimeInvokeResult result ) : void
function Mono.Debugger.Languages.TargetFunctionType
object_argument Mono.Debugger.Languages.TargetStructObject
param_objects Mono.Debugger.Languages.TargetObject
flags RuntimeInvokeFlags
result RuntimeInvokeResult
리턴 void

SetKilledFlag() 공개 메소드

public SetKilledFlag ( ) : void
리턴 void

SetRegisters() 공개 메소드

public SetRegisters ( Registers registers ) : void
registers Registers
리턴 void

SimpleLookup() 공개 메소드

public SimpleLookup ( TargetAddress address, bool exact_match ) : Symbol
address TargetAddress
exact_match bool
리턴 Symbol

SingleSteppingEngine() 보호된 메소드

protected SingleSteppingEngine ( ThreadManager manager, Process process ) : System
manager ThreadManager
process System.Diagnostics.Process
리턴 System

SingleSteppingEngine() 공개 메소드

public SingleSteppingEngine ( ThreadManager manager, Process process, Inferior inferior, int pid ) : System
manager ThreadManager
process System.Diagnostics.Process
inferior Inferior
pid int
리턴 System

SingleSteppingEngine() 공개 메소드

public SingleSteppingEngine ( ThreadManager manager, Process process, ProcessStart start ) : System
manager ThreadManager
process System.Diagnostics.Process
start ProcessStart
리턴 System

StartApplication() 공개 메소드

public StartApplication ( CommandResult result ) : CommandResult
result CommandResult
리턴 CommandResult

StartExecedChild() 공개 메소드

public StartExecedChild ( CommandResult result ) : CommandResult
result CommandResult
리턴 CommandResult

StartForkedChild() 공개 메소드

public StartForkedChild ( CommandResult result ) : CommandResult
result CommandResult
리턴 CommandResult

StartOperation() 보호된 메소드

Start a new stepping operation. All stepping operations are done asynchronously. The inferior basically just knows two kinds of stepping operations: there is do_continue() to continue execution (until a breakpoint is hit or the target receives a signal or exits) and there is do_step_native() to single-step one machine instruction. There's also a version of do_continue() which takes an address - it inserts a temporary breakpoint on that address and calls do_continue(). Let's call these "atomic operations" while a "stepping operation" is something like stepping until the next source line. We normally need to do several atomic operations for each stepping operation. We start a new stepping operation here, but what we actually do is starting an atomic operation on the target. Note that we just start it, but don't wait until is completed. Once the target is running, we go back to the main event loop and wait for it (or another thread) to stop (or to get another command from the user).
protected StartOperation ( ) : void
리턴 void

StartSuspended() 공개 메소드

public StartSuspended ( ) : void
리턴 void

StartThread() 공개 메소드

public StartThread ( CommandResult result ) : CommandResult
result CommandResult
리턴 CommandResult

Step() 공개 메소드

public Step ( ThreadingModel model, StepMode mode, StepFrame frame ) : CommandResult
model ThreadingModel
mode StepMode
frame StepFrame
리턴 CommandResult

Stop() 공개 메소드

public Stop ( ) : void
리턴 void

ToString() 공개 메소드

public ToString ( ) : string
리턴 string

WriteAddress() 공개 메소드

public WriteAddress ( TargetAddress address, TargetAddress value ) : void
address TargetAddress
value TargetAddress
리턴 void

WriteBuffer() 공개 메소드

public WriteBuffer ( TargetAddress address, byte buffer ) : void
address TargetAddress
buffer byte
리턴 void

WriteByte() 공개 메소드

public WriteByte ( TargetAddress address, byte value ) : void
address TargetAddress
value byte
리턴 void

WriteInteger() 공개 메소드

public WriteInteger ( TargetAddress address, int value ) : void
address TargetAddress
value int
리턴 void

WriteLongInteger() 공개 메소드

public WriteLongInteger ( TargetAddress address, long value ) : void
address TargetAddress
value long
리턴 void

check_inferior() 보호된 메소드

protected check_inferior ( ) : void
리턴 void

disable_extended_notification() 보호된 메소드

protected disable_extended_notification ( NotificationType type ) : void
type NotificationType
리턴 void

do_continue() 보호된 메소드

Resume the target.
protected do_continue ( ) : void
리턴 void

do_continue() 보호된 메소드

protected do_continue ( TargetAddress until ) : void
until TargetAddress
리턴 void

do_next() 보호된 메소드

Step over the next machine instruction.
protected do_next ( ) : void
리턴 void

do_step() 보호된 메소드

protected do_step ( ) : void
리턴 void

do_step_native() 보호된 메소드

protected do_step_native ( ) : void
리턴 void

enable_extended_notification() 보호된 메소드

protected enable_extended_notification ( NotificationType type ) : void
type NotificationType
리턴 void

enforce_managed_context() 보호된 메소드

protected enforce_managed_context ( ) : void
리턴 void

frames_invalid() 보호된 메소드

protected frames_invalid ( ) : void
리턴 void

insert_lmf_breakpoint() 보호된 메소드

protected insert_lmf_breakpoint ( TargetAddress lmf_address ) : void
lmf_address TargetAddress
리턴 void

insert_temporary_breakpoint() 보호된 메소드

protected insert_temporary_breakpoint ( TargetAddress address ) : void
address TargetAddress
리턴 void

remove_lmf_breakpoint() 보호된 메소드

protected remove_lmf_breakpoint ( ) : void
리턴 void

remove_temporary_breakpoint() 보호된 메소드

protected remove_temporary_breakpoint ( ) : void
리턴 void

request_managed_callback() 보호된 메소드

protected request_managed_callback ( ManagedCallbackData data ) : void
data ManagedCallbackData
리턴 void

restore_stack() 보호된 메소드

protected restore_stack ( StackData stack ) : void
stack StackData
리턴 void

set_registers() 보호된 메소드

protected set_registers ( Registers registers ) : void
registers Registers
리턴 void

update_current_frame() 보호된 메소드

protected update_current_frame ( StackFrame new_frame ) : void
new_frame System.Diagnostics.StackFrame
리턴 void

프로퍼티 상세

current_backtrace 보호되어 있는 프로퍼티

protected Backtrace current_backtrace
리턴 Backtrace

current_frame 보호되어 있는 프로퍼티

protected StackFrame,System.Diagnostics current_frame
리턴 System.Diagnostics.StackFrame

current_method 보호되어 있는 프로퍼티

protected Method current_method
리턴 Method

registers 보호되어 있는 프로퍼티

protected Registers registers
리턴 Registers