frysk.proc.live
Class LinuxPtraceTask

java.lang.Object
  extended by frysk.proc.Task
      extended by frysk.proc.live.LinuxPtraceTask

public class LinuxPtraceTask
extends Task

A Linux Task tracked using PTRACE.


Nested Class Summary
 
Nested classes/interfaces inherited from class frysk.proc.Task
Task.TaskEventObservable
 
Field Summary
 Breakpoint steppingBreakpoint
          Whether we are currently stepping over a breakpoint.
 boolean syscallSigretXXX
          When the last request to the process was a step request, whether it was a request to step a sigreturn syscall.
 
Constructor Summary
LinuxPtraceTask(LinuxPtraceTask forkingTask, LinuxPtraceProc proc, TaskAttachedObserverXXX attached)
          Create a new attached main Task of Proc.
LinuxPtraceTask(LinuxPtraceTask cloningTask, ProcessIdentifier clone)
          Create a new attached clone of Task.
LinuxPtraceTask(Proc proc, ProcessIdentifier pid)
          Create a new unattached Task.
 
Method Summary
 Set bogusUseOfInternalBlockersVariableFIXME()
          XXX: Code using this needs a re-think.
 ISA getISA()
          Return the Task's ISA.
 Isa getIsaFIXME()
          Return the Task's ISA.
 ByteBuffer getMemory()
          Return the Task's memory.
 int getMod()
          Use a counter rather than a boolean because multiple caches may depend on this count and no cache should be able to clear it.
 long getPC()
          Return the address of the instruction that this task will execute next.
 void incrementMod()
           
 boolean isInstructionObserverAdded(TaskObserver.Instruction o)
          Returns true if the observer has been added to task's instruction observer list.
 void requestAddAttachedObserver(TaskAttachedObserverXXX o)
          Add a TaskAttachedObserverXXX observer.
 void requestAddClonedObserver(TaskObserver.Cloned o)
          Add a TaskObserver.Cloned observer.
 void requestAddCodeObserver(TaskObserver.Code o, long a)
          Add TaskObserver.Code to the TaskObserver pool.
 void requestAddExecedObserver(TaskObserver.Execed o)
          Add TaskObserver.Execed to the TaskObserver pool.
 void requestAddForkedObserver(TaskObserver.Forked o)
          Add a TaskObserver.Forked observer.
 void requestAddInstructionObserver(TaskObserver.Instruction o)
          Request the addition of a Instruction observer that will be notified as soon as the task executes an instruction.
 void requestAddSignaledObserver(TaskObserver.Signaled o)
          Add TaskObserver.Signaled to the TaskObserver pool.
 void requestAddSyscallsObserver(TaskObserver.Syscalls o)
          Add TaskObserver.Syscalls to the TaskObserver pool.
 void requestAddTerminatedObserver(TaskObserver.Terminated o)
          Add a TaskObserver.Terminated observer.
 void requestAddTerminatingObserver(TaskObserver.Terminating o)
          Add TaskObserver.Terminating to the TaskObserver pool.
 void requestAddWatchObserver(TaskObserver.Watch o, long address, int length, boolean writeOnly)
          Add a TaskObserver.Watch observer (hardware data breakpoint only)
 void requestDeleteAttachedObserver(TaskAttachedObserverXXX o)
          Delete a TaskAttachedObserverXXX observer.
 void requestDeleteClonedObserver(TaskObserver.Cloned o)
          Delete a TaskObserver.Cloned observer.
 void requestDeleteCodeObserver(TaskObserver.Code o, long a)
          Delete TaskObserver.Code for the TaskObserver pool.
 void requestDeleteExecedObserver(TaskObserver.Execed o)
          Delete TaskObserver.Execed.
 void requestDeleteForkedObserver(TaskObserver.Forked o)
          Delete a TaskObserver.Forked observer.
 void requestDeleteInstructionObserver(TaskObserver.Instruction o)
          Delete TaskObserver.Instruction from the TaskObserver pool.
 void requestDeleteSignaledObserver(TaskObserver.Signaled o)
          Delete TaskObserver.Signaled.
 void requestDeleteSyscallsObserver(TaskObserver.Syscalls o)
          Delete TaskObserver.Syscall.
 void requestDeleteTerminatedObserver(TaskObserver.Terminated o)
          Delete a TaskObserver.Terminated observer.
 void requestDeleteTerminatingObserver(TaskObserver.Terminating o)
          Delete TaskObserver.Terminating.
 void requestDeleteWatchObserver(TaskObserver.Watch o, long address, int length, boolean writeOnly)
          Delete a TaskObserver.Watch observer (hardware data breakpoint only)
 void requestUnblock(TaskObserver observerArg)
          Request that the observer be removed from this tasks set of blockers; once there are no blocking observers, this task resumes.
 void sendAttach()
           
 void sendStop()
           
 void setPC(long addr)
          Set the address of the instruction that this task will execute next.
 
Methods inherited from class frysk.proc.Task
access, compareTo, getName, getProc, getRegister, getRegisterBuffersFIXME, getSignalTable, getSyscallTable, getTid, setRegister, toString
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

syscallSigretXXX

public boolean syscallSigretXXX
When the last request to the process was a step request, whether it was a request to step a sigreturn syscall. Set by sendStepInstruction(). XXX: This should be a state in Linux/PTRACE state machine.


steppingBreakpoint

public Breakpoint steppingBreakpoint
Whether we are currently stepping over a breakpoint. Used in the running task state when a trap event occurs after a step has been issued. Null when no step is being performed. XXX: This variable belongs in the Linux/PTRACE state machine.

Constructor Detail

LinuxPtraceTask

public LinuxPtraceTask(Proc proc,
                       ProcessIdentifier pid)
Create a new unattached Task.


LinuxPtraceTask

public LinuxPtraceTask(LinuxPtraceTask cloningTask,
                       ProcessIdentifier clone)
Create a new attached clone of Task.


LinuxPtraceTask

public LinuxPtraceTask(LinuxPtraceTask forkingTask,
                       LinuxPtraceProc proc,
                       TaskAttachedObserverXXX attached)
Create a new attached main Task of Proc.

Method Detail

getMemory

public ByteBuffer getMemory()
Return the Task's memory.

Specified by:
getMemory in class Task

getISA

public ISA getISA()
Return the Task's ISA. Can this instead look at AUXV?

Specified by:
getISA in class Task

getIsaFIXME

public Isa getIsaFIXME()
Return the Task's ISA. XXX: This code locally, and not the IsaFactory, and definitly not via a PID should be determining the ISA of the process.


sendStop

public void sendStop()

sendAttach

public void sendAttach()

requestUnblock

public void requestUnblock(TaskObserver observerArg)
Request that the observer be removed from this tasks set of blockers; once there are no blocking observers, this task resumes.

Specified by:
requestUnblock in class Task

bogusUseOfInternalBlockersVariableFIXME

public Set bogusUseOfInternalBlockersVariableFIXME()
Description copied from class: Task
XXX: Code using this needs a re-think.

Overrides:
bogusUseOfInternalBlockersVariableFIXME in class Task

requestAddWatchObserver

public void requestAddWatchObserver(TaskObserver.Watch o,
                                    long address,
                                    int length,
                                    boolean writeOnly)
Add a TaskObserver.Watch observer (hardware data breakpoint only)

Specified by:
requestAddWatchObserver in class Task

requestDeleteWatchObserver

public void requestDeleteWatchObserver(TaskObserver.Watch o,
                                       long address,
                                       int length,
                                       boolean writeOnly)
Delete a TaskObserver.Watch observer (hardware data breakpoint only)

Specified by:
requestDeleteWatchObserver in class Task

requestAddClonedObserver

public void requestAddClonedObserver(TaskObserver.Cloned o)
Add a TaskObserver.Cloned observer.

Specified by:
requestAddClonedObserver in class Task

requestDeleteClonedObserver

public void requestDeleteClonedObserver(TaskObserver.Cloned o)
Delete a TaskObserver.Cloned observer.

Specified by:
requestDeleteClonedObserver in class Task

requestAddAttachedObserver

public void requestAddAttachedObserver(TaskAttachedObserverXXX o)
Add a TaskAttachedObserverXXX observer.

Specified by:
requestAddAttachedObserver in class Task

requestDeleteAttachedObserver

public void requestDeleteAttachedObserver(TaskAttachedObserverXXX o)
Delete a TaskAttachedObserverXXX observer.

Specified by:
requestDeleteAttachedObserver in class Task

requestAddForkedObserver

public void requestAddForkedObserver(TaskObserver.Forked o)
Add a TaskObserver.Forked observer.

Specified by:
requestAddForkedObserver in class Task

requestDeleteForkedObserver

public void requestDeleteForkedObserver(TaskObserver.Forked o)
Delete a TaskObserver.Forked observer.

Specified by:
requestDeleteForkedObserver in class Task

requestAddTerminatedObserver

public void requestAddTerminatedObserver(TaskObserver.Terminated o)
Add a TaskObserver.Terminated observer.

Specified by:
requestAddTerminatedObserver in class Task

requestDeleteTerminatedObserver

public void requestDeleteTerminatedObserver(TaskObserver.Terminated o)
Delete a TaskObserver.Terminated observer.

Specified by:
requestDeleteTerminatedObserver in class Task

requestAddTerminatingObserver

public void requestAddTerminatingObserver(TaskObserver.Terminating o)
Add TaskObserver.Terminating to the TaskObserver pool.

Specified by:
requestAddTerminatingObserver in class Task

requestDeleteTerminatingObserver

public void requestDeleteTerminatingObserver(TaskObserver.Terminating o)
Delete TaskObserver.Terminating.

Specified by:
requestDeleteTerminatingObserver in class Task

requestAddExecedObserver

public void requestAddExecedObserver(TaskObserver.Execed o)
Add TaskObserver.Execed to the TaskObserver pool.

Specified by:
requestAddExecedObserver in class Task

requestDeleteExecedObserver

public void requestDeleteExecedObserver(TaskObserver.Execed o)
Delete TaskObserver.Execed.

Specified by:
requestDeleteExecedObserver in class Task

requestAddSyscallsObserver

public void requestAddSyscallsObserver(TaskObserver.Syscalls o)
Add TaskObserver.Syscalls to the TaskObserver pool.

Specified by:
requestAddSyscallsObserver in class Task

requestDeleteSyscallsObserver

public void requestDeleteSyscallsObserver(TaskObserver.Syscalls o)
Delete TaskObserver.Syscall.

Specified by:
requestDeleteSyscallsObserver in class Task

requestAddSignaledObserver

public void requestAddSignaledObserver(TaskObserver.Signaled o)
Add TaskObserver.Signaled to the TaskObserver pool.

Specified by:
requestAddSignaledObserver in class Task

requestDeleteSignaledObserver

public void requestDeleteSignaledObserver(TaskObserver.Signaled o)
Delete TaskObserver.Signaled.

Specified by:
requestDeleteSignaledObserver in class Task

requestAddCodeObserver

public void requestAddCodeObserver(TaskObserver.Code o,
                                   long a)
Add TaskObserver.Code to the TaskObserver pool.

Specified by:
requestAddCodeObserver in class Task

requestDeleteCodeObserver

public void requestDeleteCodeObserver(TaskObserver.Code o,
                                      long a)
Delete TaskObserver.Code for the TaskObserver pool.

Specified by:
requestDeleteCodeObserver in class Task

requestAddInstructionObserver

public void requestAddInstructionObserver(TaskObserver.Instruction o)
Request the addition of a Instruction observer that will be notified as soon as the task executes an instruction. o.updateExecuted is called as soon as the Task starts running again (is not blocked or stopped) and executes the next instruction.

Specified by:
requestAddInstructionObserver in class Task

requestDeleteInstructionObserver

public void requestDeleteInstructionObserver(TaskObserver.Instruction o)
Delete TaskObserver.Instruction from the TaskObserver pool.

Specified by:
requestDeleteInstructionObserver in class Task

isInstructionObserverAdded

public boolean isInstructionObserverAdded(TaskObserver.Instruction o)
Description copied from class: Task
Returns true if the observer has been added to task's instruction observer list.

Specified by:
isInstructionObserverAdded in class Task

incrementMod

public void incrementMod()

getMod

public int getMod()
Description copied from class: Task
Use a counter rather than a boolean because multiple caches may depend on this count and no cache should be able to clear it.

Specified by:
getMod in class Task

getPC

public long getPC()
Description copied from class: Task
Return the address of the instruction that this task will execute next.

Specified by:
getPC in class Task

setPC

public void setPC(long addr)
Description copied from class: Task
Set the address of the instruction that this task will execute next.

Specified by:
setPC in class Task