Mercurial > hg > truffle
diff agent/src/os/win32/README-commands.txt @ 0:a61af66fc99e jdk7-b24
Initial load
author | duke |
---|---|
date | Sat, 01 Dec 2007 00:00:00 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/agent/src/os/win32/README-commands.txt Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,246 @@ +This debug server uses a largely text-based protocol, except for +certain bulk data transfer operations. All text is in single-byte +US-ASCII except for the strings returned in "proclist". + +NOTE that the character '|' (vertical bar) is used as an escape +character to switch the incoming data stream to the debug server into +binary mode, so no text command may contain that character. + +Commands understood: + +ascii <EOL> ::= + + Changes to ASCII mode. This affects all outgoing strings. At + startup the system is in unicode mode. + +unicode <EOL> ::= + + Changes to UNICODE mode. This affects all outgoing strings. This + is the default mode upon startup. + +proclist <EOL> ::= + <int num> [<unsigned int pid> <int charSize> <int numChars> [<binary char_t name>]...]... <EOL> + + Returns integer indicating number of processes to follow, followed + by (pid, name) pairs. Names are given by (charSize, numChars, + [char_t]...) tuples; charSize indicates the size of each character + in bytes, numChars the number of characters in the string, and + name the raw data for the string. Each individual character of the + string, if multi-byte, is transmitted in network byte order. + numChars and name are guaranteed to be separated by precisely one + US-ASCII space. If process list is not available because of + limitations of the underlying operating system, number of + processes returned is 0. + +attach <int pid> <EOL> ::= <bool result> <EOL> + + Attempts to attach to the specified process. Returns 1 if + successful, 0 if not. Will fail if already attached or if the + process ID does not exist. Attaching to a process causes the + process to be suspended. + +detach <EOL> ::= <bool result> <EOL> + + Detaches from the given process. Attaching and detaching multiple + times during a debugging session is allowed. Detaching causes the + process to resume execution. + +libinfo <EOL> ::= + <int numLibs> [<int charSize> <int numChars> [<binary char_t name>]... <address baseAddr>]... <EOL> + + May only be called once attached and the target process must be + suspended; otherwise, returns 0. Returns list of the full path + names of all of the loaded modules (including the executable + image) in the target process, as well as the base address at which + each module was relocated. See proclist for format of strings, but + NOTE that charSize is ALWAYS 1 for this particular routine, + regardless of the setting of ASCII/UNICODE. + +peek <address addr> <unsigned int numBytes> <EOL> ::= + B<binary char success> + [<binary unsigned int len> <binary char isMapped> [<binary char data>]...]... + + NOTE that the binary portion of this message is prefixed by the + uppercase US-ASCII letter 'B', allowing easier synchronization by + clients. There is no data between the 'B' and the rest of the + message. + + May only be called once attached. Reads the address space of the + target process starting at the given address (see below for format + specifications) and extending the given number of bytes. Whether + the read succeeded is indicated by a single byte containing a 1 or + 0 (success or failure). If successful, the return result is given + in a sequence of ranges. _len_, the length of each range, is + indicated by a 32-bit unsigned integer transmitted with big-endian + byte ordering (i.e., most significant byte first). _isMapped_ + indicates whether the range is mapped or unmapped in the target + process's address space, and will contain the value 1 or 0 for + mapped or unmapped, respectively. If the range is mapped, + _isMapped_ is followed by _data_, containing the raw binary data + for the range. The sum of all ranges' lengths is guaranteed to be + equivalent to the number of bytes requested. + +poke <address addr> |[<binary unsigned int len> [<binary char data>]] <EOL> ::= + <bool result> <EOL> + + NOTE that the binary portion of this message is prefixed by the + uppercase US-ASCII character '|' (vertical bar), allowing easier + synchronization by the server. There is no data between the '|' + and the rest of the message. ('B' is not used here because + addresses can contain that letter; no alphanumeric characters are + used because some of the parsing routines are used by the Solaris + SA port, and in that port any alphanumeric character can show up + as a part of a symbol being looked up.) + + May only be called once attached. Writes the address space of the + target process starting at the given address (see below for format + specifications), extending the given number of bytes, and + containing the given data. The number of bytes is a 32-bit + unsigned integer transmitted with big-endian byte ordering (i.e., + most significant byte first). This is followed by the raw binary + data to be placed at that address. The number of bytes of data + must match the number of bytes specified in the message. + + Returns true if the write succeeded; false if it failed, for + example because a portion of the region was not mapped in the + target address space. + +threadlist <EOL> ::= <int numThreads> [<address threadHandle>...] <EOL> + + May only be called once attached and the target process must be + suspended; otherwise, returns 0. If available, returns handles for + all of the threads in the target process. These handles may be + used as arguments to the getcontext and selectorentry + commands. They do not need to be (and should not be) duplicated + via the duphandle command and must not be closed via the + closehandle command. + +duphandle <address handle> <EOL> ::= + <bool success> [<address duplicate>] <EOL> + + Duplicates a HANDLE read from the target process's address space. + HANDLE is a Windows construct (typically typedef'd to void *). + The returned handle should ultimately be closed via the + closehandle command; failing to do so can cause resource leaks. + + The purpose of this command is to allow the debugger to read the + value of a thread handle from the target process and query its + register set and thread selector entries via the getcontext and + selectorentry commands, below; such use implies that the target + program has its own notion of the thread list, and further, that + the debugger has a way of locating that thread list. + +closehandle <address handle> <EOL> ::= + + Closes a handle retrieved via the duphandle command, above. + +getcontext <address threadHandle> <EOL> ::= <bool success> [<context>] <EOL> + + Returns the context for the given thread. The handle must either + be one of the handles returned from the threadlist command or the + result of duplicating a thread handle out of the target process + via the duphandle command. The target process must be suspended. + + The context is returned as a series of hex values which represent + the following x86 registers in the following order: + EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, EIP, DS, ES, FS, GS, + CS, SS, EFLAGS, DR0, DR1, DR2, DR3, DR6, DR7 + + FIXME: needs to be generalized and/or specified for other + architectures. + +setcontext <address threadHandle> <context> ::= <bool success> <EOL> + + Sets the context of the given thread. The target process must be + suspended. See the getcontext command for the ordering of the + registers in the context. + + Even if the setcontext command succeeds, some of the bits in some + of the registers (like the global enable bits in the debug + registers) may be overridden by the operating system. To ensure + the debugger's notion of the register set is up to date, it is + recommended to follow up a setcontext with a getcontext. + +selectorentry <address threadHandle> <int selector> <EOL> ::= + <bool success> + [<address limitLow> <address baseLow> + <address baseMid> <address flags1> + <address flags2> <address baseHi>] <EOL> + + Retrieves a descriptor table entry for the given thread and + selector. This data structure allows conversion of a + segment-relative address to a linear virtual address. It is most + useful for locating the Thread Information Block for a given + thread handle to be able to find that thread's ID, to be able to + understand whether two different thread handles in fact refer to + the same underlying thread. + + This command will only work on the X86 architecture and will + return false for the success flag (with no additional information + sent) on other architectures. + +suspend ::= + + Suspends the target process. Must be attached to a target process. + A process is suspended when attached to via the attach command. If + the target process is already suspended then this command has no + effect. + +resume ::= + + Resumes the target process without detaching from it. Must be + attached to a target process. After resuming a target process, the + debugger client must be prepared to poll for events from the + target process fairly frequently in order for execution in the + target process to proceed normally. If the target process is + already resumed then this command has no effect. + +pollevent ::= + <bool eventPresent> [<address threadHandle> <unsigned int eventCode>] + + Additional entries in result for given eventCode: + + LOAD/UNLOAD_DLL_DEBUG_EVENT: <address baseOfDLL> + EXCEPTION_DEBUG_EVENT: <unsigned int exceptionCode> <address faultingPC> + + Additional entries for given exceptionCode: + + EXCEPTION_ACCESS_VIOLATION: <bool wasWrite> <address faultingAddress> + + <EOL> + + Polls once to see whether a debug event has been generated by the + target process. If none is present, returns 0 immediately. + Otherwise, returns 1 along with a series of textual information + about the event. The event is not cleared, and the thread resumed, + until the continueevent command is sent, or the debugger client + detaches from the target process. + + Typically a debugger client will suspend the target process upon + reception of a debug event. Otherwise, it is not guaranteed that + all threads will be suspended upon reception of a debug event, and + any operations requiring that threads be suspended (including + fetching the context for the thread which generated the event) + will fail. + +continueevent <bool passEventToClient> ::= <bool success> <EOL> + + Indicates that the current debug event has been used by the + debugger client and that the target process should be resumed. The + passEventToClient flag indicates whether the event should be + propagated to the target process. Breakpoint and single-step + events should not be propagated to the target. Returns false if + there was no pending event, true otherwise. + +exit <EOL> + + Exits this debugger session. + +Format specifications: + +// Data formats and example values: +<EOL> ::= end of line (typically \n on Unix platforms, or \n\r on Windows) +<address> ::= 0x12345678[9ABCDEF0] /* up to 64-bit hex value */ +<unsigned int> ::= 5 /* up to 32-bit integer number; no leading sign */ +<bool> ::= 1 /* ASCII '0' or '1' */ +<context> ::= <address> ...