|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object frysk.proc.Task frysk.proc.live.LiveTask frysk.proc.live.LinuxPtraceTask
public class LinuxPtraceTask
A Linux Task tracked using PTRACE.
Nested Class Summary |
---|
Nested classes/interfaces inherited from class frysk.proc.Task |
---|
Task.TaskEventObservable |
Field Summary | |
---|---|
private TaskObservable |
attachedObservers
Set of Attached observers. |
(package private) Set |
blockers
Set of interfaces currently blocking this task. |
private TaskObservable |
clonedObservers
Set of Cloned observers. |
(package private) TaskObservable |
codeObservers
Set of Code observers. |
private LinuxPtraceTask |
creator
|
private ISA |
currentISA
|
private TaskObservable |
execedObservers
Set of Execed observers. |
private static Log |
fine
|
private TaskObservable |
forkedObservers
Set of Forked observers. |
(package private) TaskObservable |
instructionObservers
Set of Instruction observers. |
(package private) boolean |
justStartedXXX
Whether we have just started the Task. |
private ByteBuffer |
memory
|
private int |
modCount
|
private LinuxPtraceTaskState |
newState
|
private LinuxPtraceTaskState |
oldState
The state of this task. |
private Register |
pcRegister
|
(package private) LinkedList |
pendingObservations
List containing the TaskObservations that are pending addition or deletion (in order that they were requested). |
private long |
ptraceOptions
|
private RegisterBanks |
registerBanks
|
private TaskObservable |
signaledObservers
Set of Signaled observers. |
(package private) Signal |
sigSendXXX
The signal, or zero, send last to the task. |
Breakpoint |
steppingBreakpoint
Whether we are currently stepping over a breakpoint. |
(package private) TaskObservable |
syscallObservers
Set of Syscall observers. |
boolean |
syscallSigretXXX
When the last request to the process was a step request, whether it was a request to step a sigreturn syscall. |
private TaskObservable |
terminatedObservers
Set of Terminated observers. |
private TaskObservable |
terminatingObservers
Set of Terminating observers. |
private TaskObservable |
watchObservers
Set of Watch observers. |
Fields inherited from class frysk.proc.live.LiveTask |
---|
tid |
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. |
protected void |
clearIsa()
|
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. |
(package private) ByteBuffer |
getRawMemory()
Return the raw memory byte-buffer. |
protected RegisterBanks |
getRegisterBanks()
Return this task's register banks. |
protected LinuxPtraceTaskState |
getState()
Return the current state. |
protected String |
getStateFIXME()
Return the state as a string; do not use!!!! |
(package private) void |
handleAddObservation(TaskObservation observation)
(Internal) Add the specified observer to the observable. |
(package private) void |
handleDeleteObservation(TaskObservation observation)
(Internal) Delete the specified observer from the observable. |
private LinuxPtraceTaskState |
handleDisappearedEvent(Throwable arg)
|
(package private) void |
handleUnblock(TaskObserver observer)
|
void |
incrementMod()
|
(package private) void |
initializeAttachedState()
|
boolean |
isInstructionObserverAdded(TaskObserver.Instruction o)
Returns true if the observer has been added to task's instruction observer list. |
(package private) int |
notifyAttached()
Notify all Attached observers that this task attached. |
(package private) int |
notifyClonedOffspring()
Notify all cloned observers that this task cloned. |
(package private) int |
notifyClonedParent(Task offspring)
Notify all cloned observers that this task cloned. |
(package private) int |
notifyCodeBreakpoint(long address)
Notify all Code observers of the breakpoint. |
(package private) int |
notifyExeced()
Notify all Execed observers, of this Task's demise. |
(package private) int |
notifyForkedOffspring()
Notify all Forked observers that this task's new offspring, created using fork, is sitting at the first instruction. |
(package private) int |
notifyForkedParent(Task offspring)
Notify all Forked observers that this task forked. |
(package private) int |
notifyInstruction()
Notify all Instruction observers. |
(package private) int |
notifySignaled(int sig)
Notify all Signaled observers of the signal. |
(package private) int |
notifySyscallEnter()
Notify all Syscall observers of this Task's entry into a system call. |
(package private) int |
notifySyscallExit()
Notify all Syscall observers of this Task's exit from a system call. |
(package private) int |
notifyTerminated(boolean sig,
int value)
Notify all Terminated observers, of this Task's demise. |
(package private) int |
notifyTerminating(boolean sig,
int value)
Notify all Terminating observers, of this Task's demise. |
(package private) int |
notifyWatchpoint(long address,
int length,
boolean writeOnly)
Notify all Watchpoint observers of the triggered watchpoint. |
protected LinuxPtraceTaskState |
oldState()
Return the current state while at the same time marking that the state is in flux. |
private Register |
pcRegister()
|
(package private) void |
performAttach()
(Internal) Tell the task to attach itself (if it isn't already). |
(package private) void |
performContinue()
(Internal) Requesting that the task go (or resume execution). |
(package private) void |
performDetach(boolean shouldRemoveObservers)
(Internal) Tell the task to detach itself (if it isn't already). |
(package private) void |
performRemoval()
(Internal) Tell the task to remove itself (it is no longer listed in the system process table and, presumably, has exited). |
protected void |
postDisappearedEvent(Throwable arg)
Must inject disappeared events back into the event loop so that they can be processed in sequence. |
(package private) void |
processClonedEvent(LinuxPtraceTask clone)
(internal) This task cloned creating the new Task cloneArg. |
(package private) void |
processDisappearedEvent(Throwable arg)
(internal) The task has disappeared (due to an exit or some other error operation). |
(package private) void |
processExecedEvent()
(internal) The task has execed, overlaying itself with another program. |
(package private) void |
processForkedEvent(LinuxPtraceTask fork)
(internal) This Task forked creating an entirely new child process containing one (the fork) task. |
(package private) void |
processStoppedEvent(Signal signal)
(internal) This task stopped with SIGNAL pending. |
(package private) void |
processSyscalledEvent()
(internal) The task is performing a system call. |
(package private) void |
processTerminatedEvent(Signal signal,
int value)
(internal) The task has terminated; if SIGNAL is non-NULL the termination signal else STATUS contains the exit status. |
(package private) void |
processTerminatingEvent(Signal signal,
int value)
(internal) The task is in the process of terminating. |
(package private) void |
removeObservers()
(Internal) Request that all observers from this task be removed. |
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()
|
(package private) void |
sendContinue(Signal sig)
|
(package private) void |
sendDetach(Signal sig)
|
(package private) void |
sendStepInstruction(Signal sig)
|
void |
sendStop()
|
(package private) void |
sendSyscallContinue(Signal sig)
|
void |
setPC(long addr)
Set the address of the instruction that this task will execute next. |
(package private) void |
startTracingSyscalls()
|
(package private) void |
stopTracingSyscalls()
|
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 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
private static final Log fine
private final LinuxPtraceTask creator
private ByteBuffer memory
private RegisterBanks registerBanks
private ISA currentISA
private long ptraceOptions
private LinuxPtraceTaskState oldState
private LinuxPtraceTaskState newState
final Set blockers
private final TaskObservable watchObservers
private final TaskObservable clonedObservers
private final TaskObservable attachedObservers
private final TaskObservable forkedObservers
private final TaskObservable terminatedObservers
private final TaskObservable terminatingObservers
private final TaskObservable execedObservers
final TaskObservable syscallObservers
private final TaskObservable signaledObservers
final TaskObservable codeObservers
final TaskObservable instructionObservers
final LinkedList pendingObservations
boolean justStartedXXX
Signal sigSendXXX
public boolean syscallSigretXXX
private int modCount
private Register pcRegister
public Breakpoint steppingBreakpoint
Constructor Detail |
---|
public LinuxPtraceTask(Proc proc, ProcessIdentifier pid)
public LinuxPtraceTask(LinuxPtraceTask cloningTask, ProcessIdentifier clone)
public LinuxPtraceTask(LinuxPtraceTask forkingTask, LinuxPtraceProc proc, TaskAttachedObserverXXX attached)
Method Detail |
---|
ByteBuffer getRawMemory()
getRawMemory
in class LiveTask
public ByteBuffer getMemory()
getMemory
in class Task
protected RegisterBanks getRegisterBanks()
Task
getRegisterBanks
in class Task
public ISA getISA()
getISA
in class Task
public Isa getIsaFIXME()
void processClonedEvent(LinuxPtraceTask clone)
void processForkedEvent(LinuxPtraceTask fork)
void processStoppedEvent(Signal signal)
void processTerminatingEvent(Signal signal, int value)
void processDisappearedEvent(Throwable arg)
private LinuxPtraceTaskState handleDisappearedEvent(Throwable arg)
void processSyscalledEvent()
void processTerminatedEvent(Signal signal, int value)
void processExecedEvent()
protected void postDisappearedEvent(Throwable arg)
void sendContinue(Signal sig)
void sendSyscallContinue(Signal sig)
void sendStepInstruction(Signal sig)
public void sendStop()
public void sendAttach()
void sendDetach(Signal sig)
void initializeAttachedState()
void startTracingSyscalls()
void stopTracingSyscalls()
protected final LinuxPtraceTaskState getState()
protected String getStateFIXME()
Task
getStateFIXME
in class Task
protected LinuxPtraceTaskState oldState()
void handleAddObservation(TaskObservation observation)
handleAddObservation
in class LiveTask
void handleDeleteObservation(TaskObservation observation)
handleDeleteObservation
in class LiveTask
void handleUnblock(TaskObserver observer)
void performContinue()
void performRemoval()
void performAttach()
void performDetach(boolean shouldRemoveObservers)
shouldRemoveObservers
- whether to remove the observers as well.public void requestUnblock(TaskObserver observerArg)
requestUnblock
in class Task
public Set bogusUseOfInternalBlockersVariableFIXME()
Task
bogusUseOfInternalBlockersVariableFIXME
in class Task
int notifyWatchpoint(long address, int length, boolean writeOnly)
public void requestAddWatchObserver(TaskObserver.Watch o, long address, int length, boolean writeOnly)
requestAddWatchObserver
in class Task
public void requestDeleteWatchObserver(TaskObserver.Watch o, long address, int length, boolean writeOnly)
requestDeleteWatchObserver
in class Task
int notifyClonedParent(Task offspring)
int notifyClonedOffspring()
public void requestAddClonedObserver(TaskObserver.Cloned o)
requestAddClonedObserver
in class Task
public void requestDeleteClonedObserver(TaskObserver.Cloned o)
requestDeleteClonedObserver
in class Task
int notifyAttached()
public void requestAddAttachedObserver(TaskAttachedObserverXXX o)
requestAddAttachedObserver
in class Task
public void requestDeleteAttachedObserver(TaskAttachedObserverXXX o)
requestDeleteAttachedObserver
in class Task
int notifyForkedParent(Task offspring)
int notifyForkedOffspring()
public void requestAddForkedObserver(TaskObserver.Forked o)
requestAddForkedObserver
in class Task
public void requestDeleteForkedObserver(TaskObserver.Forked o)
requestDeleteForkedObserver
in class Task
int notifyTerminated(boolean sig, int value)
public void requestAddTerminatedObserver(TaskObserver.Terminated o)
requestAddTerminatedObserver
in class Task
public void requestDeleteTerminatedObserver(TaskObserver.Terminated o)
requestDeleteTerminatedObserver
in class Task
int notifyTerminating(boolean sig, int value)
public void requestAddTerminatingObserver(TaskObserver.Terminating o)
requestAddTerminatingObserver
in class Task
public void requestDeleteTerminatingObserver(TaskObserver.Terminating o)
requestDeleteTerminatingObserver
in class Task
int notifyExeced()
public void requestAddExecedObserver(TaskObserver.Execed o)
requestAddExecedObserver
in class Task
public void requestDeleteExecedObserver(TaskObserver.Execed o)
requestDeleteExecedObserver
in class Task
int notifySyscallEnter()
int notifySyscallExit()
public void requestAddSyscallsObserver(TaskObserver.Syscalls o)
requestAddSyscallsObserver
in class Task
public void requestDeleteSyscallsObserver(TaskObserver.Syscalls o)
requestDeleteSyscallsObserver
in class Task
int notifySignaled(int sig)
public void requestAddSignaledObserver(TaskObserver.Signaled o)
requestAddSignaledObserver
in class Task
public void requestDeleteSignaledObserver(TaskObserver.Signaled o)
requestDeleteSignaledObserver
in class Task
int notifyCodeBreakpoint(long address)
public void requestAddCodeObserver(TaskObserver.Code o, long a)
requestAddCodeObserver
in class Task
public void requestDeleteCodeObserver(TaskObserver.Code o, long a)
requestDeleteCodeObserver
in class Task
int notifyInstruction()
public void requestAddInstructionObserver(TaskObserver.Instruction o)
o.updateExecuted
is called as soon as the Task
starts running again (is not blocked or stopped) and executes
the next instruction.
requestAddInstructionObserver
in class Task
public void requestDeleteInstructionObserver(TaskObserver.Instruction o)
requestDeleteInstructionObserver
in class Task
public boolean isInstructionObserverAdded(TaskObserver.Instruction o)
Task
isInstructionObserverAdded
in class Task
void removeObservers()
public void incrementMod()
public int getMod()
Task
getMod
in class Task
private Register pcRegister()
public long getPC()
Task
getPC
in class Task
public void setPC(long addr)
Task
setPC
in class Task
protected void clearIsa()
clearIsa
in class Task
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |