Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Data Map

This appendix tracks important globals, tables, structures, virtual tables, and persistent buffers. See Runtime UI Memory Map for process-relative pointer chains, Pane tree traversal, class-specific UI fields, and safe snapshot guidance. C Structure Layouts provides packed C99 views of the same established fields without replacing the detailed offset tables below.

AddressCurrent IDA nameType or sizeOwnerPurposeDetailed pageNotes
Darkages.exe:0x004D64C0app_window_activeuint8_tApplication and Win32Records whether the main window is treated as active.Startup and ShutdownSet before the message loop and by WM_ACTIVATEAPP handling.
Darkages.exe:0x004E0F00net_xor_tableuint32_t[256]Socket transformationGenerated XOR byte table.Sequence and XOR TransformationEach dword repeats one byte four times. Initial contents implement function 0.
Darkages.exe:0x004E2D70ui_bulletin_sessionvoid *UI and bulletin/mailStatic root of the active heap BulletinSession Pane.Runtime UI Memory MapTen child pointers begin at object +0xF8, current index is +0xF5, active child is +0x120, and the request-wait byte is +0x124. RVA 0x000E2D70.
Darkages.exe:0x004E2E40ui_lag_indicator_panevoid *, object 0xF8 bytesUI and timingStatic root of the persistent movement-latency indicator.Runtime UI Memory MapSmoothed millisecond value is at pane +0xF4. RVA 0x000E2E40.
Darkages.exe:0x004E32A4ui_equip_panevoid *UI and character stateStatic root of the persistent heap User Equip pane.Runtime UI Memory MapSlot identifier expression is +0xB22 + 2 * slot; names use +0xB3E + 0x80 * (slot - 1); embedded legend/details ownership is at +0x11CC. RVA 0x000E32A4.
Darkages.exe:0x004E32C0event_manager_instancevoid *Events and networkEventMan singleton that converts worker records into Event objects.Internal Event RoutingPublished by event_manager_ctor and started separately from event_dispatcher.
Darkages.exe:0x004E3564ui_users_dialog_panevoid *UIStatic root of the heap Users Dialog Pane.UI, Input, and Packet FlowsNull before the first CWho UI action creates the pane; reused and shown by later SShowUsers replies. RVA 0x000E3564.
Darkages.exe:0x004F5198ui_local_uservoid *, object 0x776C bytesUI, character, and timingOwning in-game root of the local user object.Runtime UI Memory MapMovement sequence and timing fields are at +0x6F28 through +0x6F34. RVA 0x000F5198.
Darkages.exe:0x004F51ACui_main_menu_panevoid *, object 0x124 bytesUICurrent heap MainMenuPane.UI Panes and RegistriesNon-null during the main-menu phase and cleared on transition or teardown. RVA 0x000F51AC.
Darkages.exe:0x004F51B0ui_map_panevoid *, object 0xF38 bytesUICurrent heap MapPane.UI Panes and RegistriesPublished after game-pane creation and cleared during game teardown. RVA 0x000F51B0.
Darkages.exe:0x004F51B4ui_background_panevoid *, object 0x144 bytesUICurrent heap BackgroundPane.UI Panes and RegistriesPublished with the game UI and cleared during game teardown. RVA 0x000F51B4.
Darkages.exe:0x004F51B8event_deferred_delete_queuevoid *EventsHolds objects awaiting deletion by the dispatcher tick.Internal Event RoutingCreated during initialization, drained from last element to first, and deleted after the dispatcher.
Darkages.exe:0x004F51BCnet_socket_instancevoid *Network and EventManStatic root of the active heap Socket object.IPC, Rules, and StateEventMan owns the Socket at object +0x68, publishes this root during construction, and clears it during destruction. RVA 0x000F51BC.
Darkages.exe:0x004F51C4app_configvoid *ApplicationGlobal configuration object.Startup and ShutdownConstructed from Darkages.cfg when English.nfo exists, otherwise from Legend.cfg.
Darkages.exe:0x004F51C8ui_screen_panevoid *UI and renderingGlobal 640 by 480, 8-bit screen pane.Startup and ShutdownRegistered with the event dispatcher and reactivated around the message loop.
Darkages.exe:0x004F51CCui_screen_registryvoid *UIHeap Screen composition hierarchy.UI Panes and RegistriesStride 0x3F; list fields are at +0x0C, +0x14, +0x18, and +0x1C. RVA 0x000F51CC.
Darkages.exe:0x004F51D0event_dispatchervoid *EventsGlobal event dispatcher and timer-worker object.Internal Event RoutingCreated and started by app_initialize; destroyed by app_shutdown.
Darkages.exe:0x004F51D4app_error_codeint32_tApplicationProcess-wide subsystem initialization error.Startup and ShutdownChecked after most constructors and before the message loop.
Darkages.exe:0x004F51DCapp_main_windowHWNDApplication and Win32Main DAClass window handle.Startup and ShutdownA null result from CreateWindowExA is stored but not rejected.
Darkages.exe:0x004F51E0app_instanceHINSTANCEApplication and Win32Saved process instance handle.Startup and ShutdownAssigned by app_win_main after class registration.
Darkages.exe:0x004F51F4app_shutdown_requesteduint8_tApplicationRequests termination of the blocking message loop.Startup and ShutdownObserved only after GetMessageA returns. Several writers also post a message to wake the loop.
Darkages.exe:0x004FA0E0app_single_instance_mutexHANDLEApplicationHandle for Nexon.SingleInstance.Startup and ShutdownClosed and cleared only after normal app_shutdown.
Darkages.exe:0x004FA160util_memory_manager_instancevoid *Cross-subsystem memoryStatic MemoryMan root used by client allocation and free wrappers.Hooks and InjectionRequired when an injected server packet will be released by dispatcher cleanup. RVA 0x000FA160.
Darkages.exe:0x004FC244ui_local_user_singletonvoid *UI and character stateClass-level alias of the active local user object.Runtime UI Memory MapSet by ui_local_user_ctor and cleared by ui_local_user_dtor. RVA 0x000FC244.
Darkages.exe:0x004FD320app_virus_check_failure_detailchar[256]Application checksDetail inserted into the virus-scan failure prompt.Input and Windows EventsUsed when WM_USER + 0x2046 arrives with zero wParam.
Darkages.exe:0x004FD420app_virus_report_modulechar[256]Application checksFirst infected-module name reported to the window thread.Input and Windows EventsIts address is posted in wParam for WM_USER + 0x2046.
Darkages.exe:0x004FD5A0net_xor_keykey storage, at least 13 bytesSocket transformationRuntime repeating XOR key.Sequence and XOR TransformationConstructor default is ASCII NexonInc.. Negotiated updates require at most 9 bytes.
Darkages.exe:0x004FD5ACnet_xor_key_lengthint32_tSocket transformationNumber of bytes in the active key.Sequence and XOR TransformationDefault is 9.
Darkages.exe:0x004FD5B0net_xor_key_repeateduint8_t[48]Socket transformationFour adjacent copies of the key.Sequence and XOR TransformationSupports optimized four-byte XOR loops.
Darkages.exe:0x004FD5E0net_c_send_sequenceuint8_tSocket transformationSequence inserted after ordinary transformed client actions.Sequence and XOR TransformationZero-initialized at process load and incremented modulo 256 only by the transformed client encoder; cleartext bypass actions do not consume it.
Darkages.exe:0x004FD640ui_terminal_panevoid *, object 0xF78 bytesUICurrent heap TerminalPane.UI Panes and RegistriesPublished by the constructor, returned by ui_get_terminal_pane, and cleared by the destructor. RVA 0x000FD640.
Darkages.exe:0x005002C0ui_aggrement_dialog_pane_vtablevirtual tableAggrementDialogPaneRuntime class discriminator for the agreement dialog.Pane Virtual Table InventoryAggrement is the spelling retained in the binary.
Darkages.exe:0x00500700ui_background_pane_vtablevirtual tableUIConcrete BackgroundPane handler table.UI Panes and RegistriesSocket slot +0x40 handles server portrait requests.
Darkages.exe:0x00501E60ui_bulletin_session_vtablevirtual tableBulletinSessionRuntime class discriminator for the bulletin and mail session Pane.Runtime UI Memory MapSocket slot +0x40 claims action 0x31. RVA 0x00101E60.
Darkages.exe:0x00501EC0ui_bulletin_dialog_pane_vtablevirtual tableBulletinDialogPaneRuntime class discriminator and Event handler table.Pane Virtual Table InventorySocket slot claims action 0x31.
Darkages.exe:0x00501F40ui_article_list_dialog_vtablevirtual tableArticleListDialogRuntime class discriminator and Event handler table.Pane Virtual Table InventoryCustom keyboard and editing handlers.
Darkages.exe:0x00501FC0ui_mail_list_dialog_vtablevirtual tableMailListDialogRuntime class discriminator and Event handler table.Pane Virtual Table InventoryCustom keyboard and completion handlers.
Darkages.exe:0x005020C0ui_new_article_dialog_vtablevirtual tableNewArticleDialogRuntime class discriminator and Event handler table.Pane Virtual Table InventoryControl-click handler is at vslot +0x4C.
Darkages.exe:0x00502140ui_new_mail_dialog_vtablevirtual tableNewMailDialogRuntime class discriminator and Event handler table.Pane Virtual Table InventoryControl-click handler is at vslot +0x4C.
Darkages.exe:0x005021C0ui_board_list_dialog_vtablevirtual tableBoardListDialogRuntime class discriminator and Event handler table.Pane Virtual Table InventoryHas a class-specific timer override.
Darkages.exe:0x00502240ui_article_dialog_vtablevirtual tableArticleDialogRuntime class discriminator and Event handler table.Pane Virtual Table InventoryBulletin-family mouse and socket handlers.
Darkages.exe:0x005022C0ui_mail_dialog_vtablevirtual tableMailDialogRuntime class discriminator and Event handler table.Pane Virtual Table InventoryBulletin-family mouse and socket handlers.
Darkages.exe:0x005023E0ui_article_list_pane_vtablevirtual tableArticleListPaneRuntime class discriminator for the scrollable article list.Pane Virtual Table InventoryDrawCell virtual is at +0x84.
Darkages.exe:0x00502580ui_mail_list_pane_vtablevirtual tableMailListPaneRuntime class discriminator for the scrollable mail list.Pane Virtual Table InventorySelection and DrawCell virtuals are at +0x80/+0x84.
Darkages.exe:0x00506C80ui_legend_dialog_pane_vtablevirtual tableLegendDialogPaneRuntime class discriminator for the outer character-legend dialog.Pane Virtual Table InventoryThe inner control vtable at 0x00506BE0 remains unnamed.
Darkages.exe:0x00509C20ui_lag_indicator_pane_vtablevirtual tablelag indicator paneRuntime discriminator for the persistent movement-latency indicator.Runtime UI Memory MapDraw vslot +0x48 selects one of four statcon.epf frames. RVA 0x00109C20.
Darkages.exe:0x0050C6C0ui_equip_pane_vtablevirtual tableUser Equip paneRuntime discriminator for the persistent equipment and self-look Pane.Runtime UI Memory MapRVA 0x0010C6C0.
Darkages.exe:0x0050D180event_dispatcher_vtablevoid *[8]EventsVirtual table for pane dispatch, work processing, wait handling, and periodic ticks.Internal Event RoutingSlot +0x10 points to event_dispatcher_tick.
Darkages.exe:0x0050D720event_manager_vtablevoid *[8]Events and networkEventMan worker and dispatch virtual table.Internal Event RoutingSlot +0x10 points to event_manager_periodic_noop; slot +0x14 reaches event_process_work_item.
Darkages.exe:0x0050D740event_vtablevoid *[2]EventsRuntime discriminator installed in copied mouse, keyboard, and socket Event objects.Hooks and InjectionEvent objects are 0x24 bytes in this build. RVA 0x0010D740.
Darkages.exe:0x00510300ui_game_buttons_pane_vtablevirtual tableGameButtonsPaneRuntime discriminator for the persistent in-game content owner.Runtime UI Memory MapRVA 0x00110300.
Darkages.exe:0x00510420ui_skill_inventory_pane_vtablevirtual tableskill inventory parentRuntime discriminator for the 36-entry skill inventory.Runtime UI Memory MapRVA 0x00110420.
Darkages.exe:0x00510480ui_spell_inventory_pane_vtablevirtual tablespell inventory parentRuntime discriminator for the 36-entry spell inventory.Runtime UI Memory MapRVA 0x00110480.
Darkages.exe:0x005106E0ui_users_dialog_pane_vtablevirtual tableUsers Dialog PaneRuntime discriminator for the reusable users dialog.Runtime UI Memory MapRVA 0x001106E0.
Darkages.exe:0x005134E0ui_human_image_control_pane_vtablevirtual tableHumanImageControlPaneRuntime class discriminator for the human image control.Pane Virtual Table InventoryDraw virtual is at +0x48.
Darkages.exe:0x00514820ui_skill_slot_pane_vtablevirtual tableskill slot childRuntime discriminator for a populated skill slot.Runtime UI Memory MapRVA 0x00114820.
Darkages.exe:0x00514880ui_spell_slot_pane_vtablevirtual tablespell slot childRuntime discriminator for a populated spell slot.Runtime UI Memory MapRVA 0x00114880.
Darkages.exe:0x005177C0ui_main_menu_pane_vtablevirtual tableMainMenuPaneIncludes mouse, keyboard, and server-packet handlers.UI Panes and RegistriesPacket handler is ui_main_menu_handle_server_packet.
Darkages.exe:0x00519280ui_map_pane_vtablevirtual tableMapPaneIncludes mouse, keyboard, timer, and in-game server handlers.UI Panes and RegistriesSocket Event virtual slot +0x40 points to ui_map_dispatch_server_packet.
Darkages.exe:0x0051B6C0ui_item_list_pane_vtablevirtual tableItemListPaneRuntime class discriminator for the scrollable item list.Pane Virtual Table InventoryDrawCell virtual is at +0x84.
Darkages.exe:0x0051BE60ui_monster_image_control_pane_vtablevirtual tableMonsterImageControlPaneRuntime class discriminator for the monster image control.Pane Virtual Table InventoryDraw virtual is at +0x48.
Darkages.exe:0x0051C0C0ui_question_message_dialog_vtablevirtual tableQuestionMessageDialogRuntime class discriminator for the question dialog.Pane Virtual Table InventoryAnswer sender is at class vslot +0x74.
Darkages.exe:0x0051C140ui_question_message_face_dialog_vtablevirtual tableQuestionMessageFaceDialogRuntime class discriminator for the faced question dialog.Pane Virtual Table InventoryUser-dialog and answer virtuals are at +0x64/+0x74.
Darkages.exe:0x0051D700ui_monster_pane2_vtablevirtual tableMonsterPane2Runtime class discriminator and Event handler table.Pane Virtual Table InventoryStartMove virtual is at +0x64.
Darkages.exe:0x0051E980ui_local_user_vtablevirtual tableNewUser local-user paneRuntime discriminator for the active local user object.Runtime UI Memory MapSocket vslot +0x40 dispatches SMove and the other local-user actions. RVA 0x0011E980.
Darkages.exe:0x0051FB00ui_effect_object_pane_vtablevirtual tableEffectObjectPaneRuntime class discriminator and Event handler table.Pane Virtual Table InventoryTimer vslot +0x44 is class-specific.
Darkages.exe:0x00520660ui_option_pane_vtablevirtual tableOptionPaneRuntime class discriminator for the main options dialog.Pane Virtual Table InventoryMouse, key, socket, and timer slots are all class-specific.
Darkages.exe:0x005207E0ui_exit_wait_pane_vtablevirtual tableexit-wait paneIncludes the server action 0x4C handler used by the orderly-exit exchange.SReconnectInstalled by ui_exit_wait_pane_ctor; the source-level C++ class name is not yet established.
Darkages.exe:0x005213A0ui_pane_vtablevirtual tableUIBase Pane lifecycle and event slots.UI Panes and RegistriesScreen slots are +0x28/+0x2C; event registration is +0x30/+0x34; handlers begin at +0x38.
Darkages.exe:0x00524CA0ui_screen_registry_vtablevirtual tableUIScreen composition registry table.UI Panes and RegistriesOwns packed 0x3F-byte Screen nodes.
Darkages.exe:0x00524CE0ui_screen_pane_vtablevirtual tableUI and renderingPersistent ScreenPane handler table.UI Panes and RegistriesKeyboard and timer slots have concrete overrides.
Darkages.exe:0x00526140ui_server_select_dialog_pane_vtablevirtual tableServerSelectDialogPaneIncludes the action 0x56 server-list handler.UI Panes and RegistriesConstructor and deletion diagnostics establish the class name.
Darkages.exe:0x00526940net_socket_vtablevirtual tableSocketSocket work-item interface.NetworkingSlot +0x10 points to net_poll_receive; slot +0x14 reaches net_process_work_item.
Darkages.exe:0x00528280ui_spell_book_dialog_vtablevirtual tableSpellBookDialogRuntime class discriminator for the spell-book dialog.Pane Virtual Table InventoryDraw virtual is at +0x48.
Darkages.exe:0x005282E0ui_skill_book_dialog_vtablevirtual tableSkillBookDialogRuntime class discriminator for the skill-book dialog.Pane Virtual Table InventoryDraw virtual is at +0x48.
Darkages.exe:0x00529000ui_terminal_pane_vtablevirtual tableTerminalPaneIncludes mouse, keyboard, and terminal server-packet handlers.UI Panes and RegistriesInstalled by ui_terminal_pane_ctor.
Darkages.exe:0x0052CFA0ui_weather_pane_vtablevirtual tableWeatherPaneRuntime class discriminator and Event handler table.Pane Virtual Table InventoryTimer and Draw virtuals are class-specific.

GameButtons content fields

These offsets are relative to the GameButtons owner found through the Screen or Event hierarchy. They connect persistent visible content to the owner even though the owner itself does not have a static root. The Runtime UI Memory Map records the full traversal and class-specific layout.

OffsetWidthWorking fieldReads and writes
+0x00F44map_paneConstructor-owned link that normally matches ui_map_pane.
+0x01001equipment_selectedUpdated with the other four button-state bytes during content selection.
+0x01081skill_selectedUpdated with the other four button-state bytes during content selection.
+0x01101spell_selectedUpdated with the other four button-state bytes during content selection.
+0x01181chat_selectedUpdated with the other four button-state bytes during content selection.
+0x01201status_selectedUpdated with the other four button-state bytes during content selection.
+0x01244current_content_paneCompared and replaced by all five content selectors.
+0x01304chat_paneSelected by F/f or content index 3.
+0x01344status_paneSelected by G/g or content index 4.
+0x01384equip_paneSelected by A/a or content index 0; same-pane selection can toggle visibility.
+0x013C4skill_inventory_paneSelected by S/s or content index 1.
+0x01404spell_inventory_paneSelected by D/d or content index 2.
+0x01444system_messageConstructor-owned link used by the GameButtons graph.

Worker queue and bounded ring layouts

The dispatcher, EventMan, and Socket begin with the same 0x68-byte worker base. These fields establish the in-process wake point and the native queue state relevant to an Event Proxy.

OffsetWidthWorking fieldReads and writes
+0x004vtableDerived worker vtable. Periodic virtual slot is +0x10.
+0x0C4wait_timeout_msINFINITE by default; dispatcher changes it to 1.
+0x101wait_handle_countNumber of entries beginning at +0x14.
+0x1464wait_handles[16]Entry 0 is the work semaphore released after a native queue push.
+0x544work_queuePointer to the synchronized bounded ring.
+0x584completion_monitorProtects synchronous waiter records.
+0x5C4completion_waitersList used only by synchronous work requests.
+0x604worker_threadThread handle created suspended and later resumed.
+0x644worker_thread_idThread identifier written by _beginthreadex.

Each native work record is 0x18 bytes. Asynchronous posting sets the final three fields to zero.

OffsetWidthWorking field
+0x004code
+0x044data
+0x084value
+0x0C4completion_event
+0x104result_buffer
+0x144result_buffer_size

The ring object pointed to by worker +0x54 has this established state:

OffsetWidthWorking field
+0x0C4monitor
+0x104not_full_condition
+0x144not_empty_condition
+0x184element_size
+0x1C4capacity
+0x204buffer
+0x244element_count
+0x284head_index
+0x2C4tail_index

Programmer-oriented layouts follow. They are documentation types, not recovered source declarations.

typedef uint32_t client_ptr32;

typedef struct worker_record_421 {
    uint32_t code;
    client_ptr32 data;
    int32_t value;
    client_ptr32 completion_event;
    client_ptr32 result_buffer;
    int32_t result_buffer_size;
} worker_record_421;

typedef struct worker_queue_base_421 {
    client_ptr32 vtable;
    uint8_t unknown_04[8];
    uint32_t wait_timeout_ms;
    uint8_t wait_handle_count;
    uint8_t unknown_11[3];
    client_ptr32 wait_handles[16];
    client_ptr32 work_queue;
    client_ptr32 completion_monitor;
    client_ptr32 completion_waiters;
    client_ptr32 worker_thread;
    uint32_t worker_thread_id;
} worker_queue_base_421;

typedef struct bounded_ring_421 {
    client_ptr32 vtable;
    uint8_t unknown_04[8];
    client_ptr32 monitor;
    client_ptr32 not_full_condition;
    client_ptr32 not_empty_condition;
    int32_t element_size;
    int32_t capacity;
    client_ptr32 buffer;
    int32_t element_count;
    int32_t head_index;
    int32_t tail_index;
} bounded_ring_421;

The Socket and EventMan constructors pass capacity 0x80; the dispatcher passes 0x400. An observer can sample element_count, but the value may change concurrently and external code should not write queue metadata. For a worker-affine proxy wake, validate the root and vtable, read wait_handles[0], and call ReleaseSemaphore without touching the native ring.

Event dispatcher fields

Offsets below are from the object stored in event_dispatcher. The earlier fields belong to its worker-queue base.

OffsetWidthWorking fieldReads and writes
+0x00004vtableSet to event_dispatcher_vtable.
+0x000C4wait_timeout_msSet to 1 and passed to WaitForMultipleObjects.
+0x00101wait_handle_countNumber of entries beginning at +0x14.
+0x0014variablewait_handlesHandle index 0 is the queued-work notification.
+0x00604worker_threadCreated suspended, resumed during initialization, and terminated by the base destructor.
+0x00684pane_registryRegistry traversed by internal event dispatch.
+0x006C4multimedia_period_msPassed to timeBeginPeriod and timeEndPeriod.
+0x00704current_tickLatest 32-bit timeGetTime sample and base for relative timer insertion.
+0x00744next_deadlineFirst timer deadline, or UINT32_MAX when no timer is pending.
+0x00784timer_listSorted list with capacity 256 and 20-byte records.

Event timer record

OffsetWidthMeaning
+0x004Receiver pane pointer.
+0x044Callback identifier.
+0x084Absolute 32-bit timeGetTime deadline.
+0x0C4First callback payload value.
+0x104Second callback payload value.

Event manager input fields

Offsets below are from the object stored in event_manager_instance. They are used by the window-message input queue and the EventMan worker.

OffsetWidthWorking fieldReads and writes
+0x006C4mouse_yUpdated from the first word of internal (y, x) mouse-move work and copied into button and wheel Events.
+0x00704mouse_xUpdated from the second word of internal (y, x) mouse-move work and copied into button and wheel Events.
+0x007C4double_click_time_limitA second button down is eligible only when its unsigned elapsed message time is strictly less than this value.
+0x00801previous_click_buttonValue 1 records a prior left down; value 0 records a prior right down.
+0x00844previous_click_yFirst coordinate used by internal double-click recognition.
+0x00884previous_click_xSecond coordinate used by internal double-click recognition.
+0x008C4previous_click_timeGetMessageTime value for the prior button-down candidate.
+0x0390256scan_code_pressedPer-scan-code state; bit 7 is set on key down and cleared on key up.
+0x04901input_modifier_stateCombined mouse-button and mapped keyboard modifier bits placed in Events.
+0x04B04input_block_flagsBit 0 suppresses movement, wheel, button-down, and key-down queueing.
+0x04B44mouse_button_stateBit 0 tracks left and bit 1 tracks right at window-message enqueue time.

Socket fields used by binary TCP

Offsets below are from the Socket object passed as this. They are established by the constructor and the mapped receive and send paths. The complete class layout is not yet named.

OffsetWidthWorking fieldReads and writes
+0x00684event_sinkUsed as this for event_post_socket_bytes.
+0x006C4receive_cachePoints at the object’s 0x18000 byte transport cache.
+0x480744receive_cursorIndex of the next cached transport byte.
+0x480784receive_remainingCached bytes remaining after the current byte.
+0x4807C4current_body_lengthBig-endian length assembled from the two frame header bytes.
+0x480844serial_handleSet to INVALID_HANDLE_VALUE when unused.
+0x480BC1socket_connectedCleared on recv == 0 and disconnect cleanup.
+0x480C04socketWinsock SOCKET; INVALID_SOCKET is 0xFFFFFFFF.
+0x480C50x10000wire_body_bufferReceives body bytes beginning with the server action.
+0x580C84frame_offsetCounts length-header and body bytes while a frame is open.
+0x680CCat least 0x10000decoded_or_encoded_bufferDestination for packet-body XOR transformation.
+0x780CC1transport_modeValue 5 selects the normal TCP byte path.
+0x780CD1frame_openSet after consuming 0xAA; cleared on body completion.
+0x780CF1legacy_send_sequenceDecimal digit sequence used by the printable legacy transport.
+0x780D21transfer_gateWhen set, only client action 0x10 may be queued.

Socket Event fields

The Event object created for a decoded packet has these fields:

OffsetWidthMeaningLifetime
+0x0C1Event type, value 9 for a socket packet.Set before queueing.
+0x144Owned decoded-packet pointer.Freed by the dispatcher worker after event_dispatch returns.
+0x184Decoded packet size.Positive when the pointer is present.

Structures should use unknown_XX for an established field location whose meaning remains unknown.