<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://xboxdevwiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Applesauce</id>
		<title>xboxdevwiki - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://xboxdevwiki.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Applesauce"/>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/Special:Contributions/Applesauce"/>
		<updated>2026-05-23T22:46:49Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Kernel_Debug&amp;diff=7392</id>
		<title>Kernel Debug</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Kernel_Debug&amp;diff=7392"/>
				<updated>2025-04-18T14:50:20Z</updated>
		
		<summary type="html">&lt;p&gt;Applesauce: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Only enabled in debug kernels, a Xbox with serial port can be kernel debugged with windbg.&lt;br /&gt;
only executables that have debugging switched on can be debugged over serial aswell(?) {{citation needed}}&lt;br /&gt;
{FIXME| Explain with more details ;) }&lt;br /&gt;
&lt;br /&gt;
Xqemu emulates this serial port, wich uses a [[Super_I/O | LPC chip ].&lt;br /&gt;
&lt;br /&gt;
== KD Commands ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;CTRL+B&amp;lt;/code&amp;gt;&lt;br /&gt;
| Exit the kernel debugger.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;amp;lt;ENTER&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Repeat the last command you entered.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;?&amp;lt;/code&amp;gt;&lt;br /&gt;
| Display a quick reference of basic debugger commands.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.help&amp;lt;/code&amp;gt;&lt;br /&gt;
| List meta‑commands available in the debugger.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!help&amp;lt;/code&amp;gt;&lt;br /&gt;
| List the extension commands provided by debugger plugins.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;x MODULE!SYMBOL&amp;lt;/code&amp;gt;&lt;br /&gt;
| Show symbols within a module (supports wildcards). e.g. &amp;lt;code&amp;gt;Vidya!*&amp;lt;/code&amp;gt; lists all symbols starting with “Vidya”.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;db ADDRESS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Dump raw bytes at the specified address, with any printable ASCII alongside.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dd ADDRESS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Dump memory as 32‑bit words starting at the given address.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;df ADDRESS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Dump memory as floating‑point values from the given address.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dds ADDRESS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Dump 32‑bit words and resolve any that match symbol names—handy for spotting return addresses on the stack.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dt TYPE ADDRESS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Display the fields of a structure type at a memory address. Add &amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt; to recurse into nested structures.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rM 54&amp;lt;/code&amp;gt;&lt;br /&gt;
| Show FP/MMX/XMM register contents (note the uppercase “M”).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rM 1fd&amp;lt;/code&amp;gt;&lt;br /&gt;
| Show all CPU registers.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;&lt;br /&gt;
| Step over the next instruction (runs calls/interrupts without entering them).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;&lt;br /&gt;
| Step into the next instruction (enters calls and interrupts).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bp ADDRESS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set a breakpoint at the specified instruction address.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bp ADDRESS &amp;quot;commands&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
| Create a breakpoint that executes a sequence of commands when hit (semicolon‑separated).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ba w1 ADDRESS&amp;lt;/code&amp;gt;&lt;br /&gt;
| Set a data breakpoint on writes to one byte at ADDRESS. Use “r” for reads, or “2”/“4” for word/dword sizes.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bl&amp;lt;/code&amp;gt;&lt;br /&gt;
| List all active breakpoints.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;bc INDEX&amp;lt;/code&amp;gt;&lt;br /&gt;
| Clear the breakpoint with the given index (as shown by &amp;lt;code&amp;gt;bl&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!memusage&amp;lt;/code&amp;gt;&lt;br /&gt;
| Display a summary of free memory pages and usage by category.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!heap 0 -a&amp;lt;/code&amp;gt;&lt;br /&gt;
| Dump detailed heap entries for all heaps (can generate a lot of output).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!handle 0 7&amp;lt;/code&amp;gt;&lt;br /&gt;
| List all open handles in the system (files, threads, etc.).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!poolused 3&amp;lt;/code&amp;gt;&lt;br /&gt;
| Report how pool memory is allocated across different tags.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!poolfind TAG&amp;lt;/code&amp;gt;&lt;br /&gt;
| List every pool allocation marked with the four‑character TAG.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.reboot&amp;lt;/code&amp;gt;&lt;br /&gt;
| Restart the console.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.sympath&amp;lt;/code&amp;gt;&lt;br /&gt;
| Show the current symbol search paths.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.sympath PATH&amp;lt;/code&amp;gt;&lt;br /&gt;
| Change the symbol path to PATH; use &amp;lt;code&amp;gt;.reload&amp;lt;/code&amp;gt; to apply.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;.echotimestamps&amp;lt;/code&amp;gt;&lt;br /&gt;
| Toggle timestamps on debug messages and break notifications.&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Command&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;r&amp;lt;/code&amp;gt;&lt;br /&gt;
| Shows the current register values.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;kp&amp;lt;/code&amp;gt;&lt;br /&gt;
| Displays the call stack with function parameters and line numbers. If &amp;lt;code&amp;gt;kp&amp;lt;/code&amp;gt; isn’t supported in your debugger version, use &amp;lt;code&amp;gt;kb&amp;lt;/code&amp;gt; instead.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dd esp L80&amp;lt;/code&amp;gt;&lt;br /&gt;
| Dumps raw stack memory as DWORDs starting at &amp;lt;code&amp;gt;esp&amp;lt;/code&amp;gt; (the stack pointer). &amp;lt;code&amp;gt;L80&amp;lt;/code&amp;gt; specifies length 0x80 (128 DWORDs), letting you inspect local variables on the stack.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ln eip&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;u xxxxxxxx xxxxxxxx&amp;lt;/code&amp;gt;&lt;br /&gt;
| Lists symbols around the current instruction pointer (&amp;lt;code&amp;gt;eip&amp;lt;/code&amp;gt;) so you can see where the crash happened, for example:&lt;br /&gt;
:&amp;lt;code&amp;gt;(00011050) YourGame!main+0x9&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;(0001109d) YourGame!DebugBreak.Next&amp;lt;/code&amp;gt;&lt;br /&gt;
Then use those addresses with &amp;lt;code&amp;gt;u&amp;lt;/code&amp;gt; to disassemble that code range (e.g. &amp;lt;code&amp;gt;u 00011050 0001109d&amp;lt;/code&amp;gt;).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;!process 0 7&amp;lt;/code&amp;gt;&lt;br /&gt;
| Shows details about the current process and prints a call stack for each thread.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;dd nt!KeTickCount L1&amp;lt;/code&amp;gt;&lt;br /&gt;
| Displays the kernel tick count (milliseconds since boot, excluding debugger pauses). Divide the result by 1,000 for seconds or by 3,600,000 for hours.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Applesauce</name></author>	</entry>

	<entry>
		<id>https://xboxdevwiki.net/index.php?title=Xbox_Live&amp;diff=7367</id>
		<title>Xbox Live</title>
		<link rel="alternate" type="text/html" href="https://xboxdevwiki.net/index.php?title=Xbox_Live&amp;diff=7367"/>
				<updated>2024-05-26T04:15:27Z</updated>
		
		<summary type="html">&lt;p&gt;Applesauce: /* XDK Functions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Xbox Live is an online multiplayer gaming and digital media delivery service created and operated by Microsoft. It was first made available to the Xbox system in November 2002. ([https://en.wikipedia.org/wiki/Xbox_Live Wikipedia]) Xbox Live support for the original Xbox ended in April 15, 2010. &lt;br /&gt;
&lt;br /&gt;
== Architecture ==&lt;br /&gt;
The Xbox Live architecture consists of Kerberos-based authentication tickets, with a Secure Gateway used to then access services (such as Matchmaking, Statistics/Leaderboards, and custom game servers)&lt;br /&gt;
&lt;br /&gt;
Authentication and access to Xbox Live services is controlled using the Kerberos protocol with a few proprietary customisations for the Xbox. When an Xbox first connects, the server gives it a [[Xbox Live/Machine Account|Machine Account]] which it uses to access the service; this machine account is always sent, but it can only be used alone to access UACS (User Account Creation Service) to create a user account - with both a machine account and user account, all other services are accessible.&lt;br /&gt;
&lt;br /&gt;
== XDK Functions ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+XOnline* Functions&lt;br /&gt;
|-&lt;br /&gt;
! function&lt;br /&gt;
! description&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineGetUsers(XONLINE_USER* XBLAccountusers, DWORD* numOfXBLiveAccounts)&lt;br /&gt;
|The XOnlineGetUsers function will enumerate both the hard disk and any attached memory units looking for user accounts&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineTaskClose(XONLINETASK_HANDLE logonHandle)&lt;br /&gt;
|Called to abort the authentication process.&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineStartup( XONLINE_STARTUP_PARAMS* )&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineLogon(XONLINE_USER* XBLLoggedOnUsers, DWORD* XBLservices, DWORD SERVICE_COUNT, NULL, XONLINETASK_HANDLE &amp;amp;logonHandle)&lt;br /&gt;
|When a title calls XOnlineLogon to sign in, instead of blocking until the authentication completes, an asynchronous task handle is returned. As part of the authentication process a title must specify which services it will be using (XBLservices, SERVICE_COUNT). &lt;br /&gt;
|-&lt;br /&gt;
|XOnlineTaskContinue(XONLINETASK_HANDLE logonHandle)&lt;br /&gt;
|Called to check the status of XOnlineLogon. It will return XONLINETASK_S_RUNNING while the login process has not been completed.&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineLogonTaskGetResults(XONLINETASK_HANDLE logonHandle)&lt;br /&gt;
|Will return XONLINE_S_LOGON_CONNECTION_ESTABLISHED when the task is successfully completed. Otherwise it will return an error code.&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineGetLogonUsers()&lt;br /&gt;
|This returns a pointer to an array of XONLINE USER structures. This array is similar the XONLINE USER array we populated and passed into XOnlineLogon, but is updated with error status and permission flags for each user.&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineSetUserGuestNumber(dwUserFlags , 1)&lt;br /&gt;
|macro sets a specific guest number for a player in an online game. It updates the dwUserFlags code with the new guest number, which is required for logging in. &lt;br /&gt;
|-&lt;br /&gt;
|XOnlineTitleUpdate(DWORD)&lt;br /&gt;
|The XOnlineTitleUpdate function will boot into an updater application, which performs the actual update&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineGetServiceInfo(Service, ?)&lt;br /&gt;
|XOnlineGetServiceInfo returns the connection status for a service&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineNotificationSetState&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineArbitrationCreateRoundID&lt;br /&gt;
|Generates an arbitration round ID. Takes a pointer to a ULONGLONG variable, which will hold the round ID upon return. This function must be called to generate a round ID before using other arbitration functions. &lt;br /&gt;
|-&lt;br /&gt;
|XOnlineArbitrationRegister&lt;br /&gt;
|This function registers an arbitration session by setting up necessary parameters like session ID, round duration, and control flags. It also handles the completion event and task handle for asynchronous operation. &lt;br /&gt;
|-&lt;br /&gt;
|XOnlineArbitrationReport&lt;br /&gt;
|This function reports the results of a specified round. If stats are specified, every participant must pass the stats for all participants. The arbitration server matches up and analyzes the stats, connectivity problems, and suspicious information reported by every participant to determine the outcome of the round.&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineStorageCreateServerPath&lt;br /&gt;
|generates a server path using provided information such as storage facility, user ID, team ID, and file name.&lt;br /&gt;
|-&lt;br /&gt;
|XOnlineStringVerify&lt;br /&gt;
|The XOnlineStringVerify function checks user-provided text strings for objectionable content before they are uploaded or stored. It takes the number of strings, an array of Unicode strings, the language of the text, an optional event handle for signaling, and an output task handle. It returns S_OK if the task starts               successfully,and XOnlineTaskContinue will indicate success or failure of the strings. The function can verify up to four strings at once, each up to 256 characters long. It supports multiple languages.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Discontinuation of service ==&lt;br /&gt;
&lt;br /&gt;
The service was officially discontinued on April 15th, 2010.&lt;br /&gt;
&lt;br /&gt;
12 players decided to stay in a lobby of ''Halo 2'' 24/7 to keep a server running.&lt;br /&gt;
The final player, Apache N4SIR was streaming the entire event, as the player count of 12 twindeled down to just him. At 11:40 PM PDT, on May 11th 2010, Apache N4SIR was booted from the game[http://i.imgur.com/oQw6k5H.jpg].&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [https://media.defcon.org/DEF%20CON%2030/DEF%20CON%2030%20video%20and%20slides/DEF%20CON%2030%20-%20Tristan%20Miller%20-%20Reversing%20the%20Original%20Xbox%20Live%20Protocols.mp4 Reversing the Original Xbox Live Protocols] presented by [[User:monocasa]] at DEF CON 30 (2022).&lt;/div&gt;</summary>
		<author><name>Applesauce</name></author>	</entry>

	</feed>