Skip to content
Back to skills

Find Host Say

ASecurity

Find and identify the Host_Say function in the CS2 server binary using IDA Pro MCP. Use this skill when reverse engineering CS2 server.dll or libserver.so to locate the chat-broadcast/say-command handler by finding the code that references the console chat-relay log format string "%s %s @ %s: ". Trigger: Host_Say

  • 4 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 27, 2026
toolsrefactoring

Works with

  • cli
  • mcp

Security analysis

A100/100

Scanned September 27, 2026

npx -y skills add mrc4tt/CS2_VibeSignatures --skill find-Host_Say --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Find Host Say?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Find Host Say
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/mrc4tt-find-host-say/badge)](https://www.skillsdirectory.com/skills/mrc4tt-find-host-say)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: find-Host_Say
description: |
  Find and identify the Host_Say function in the CS2 server binary using IDA Pro MCP. Use this skill when
  reverse engineering CS2 server.dll or libserver.so to locate the chat-broadcast/say-command handler by finding
  the code that references the console chat-relay log format string "%s %s @ %s: ".
  Trigger: Host_Say
disable-model-invocation: true
---

# Find Host_Say

Locate `Host_Say` in CS2 `server.dll` / `libserver.so` using IDA Pro MCP tools.

## Method

### 1. Find the Chat-Relay Format String

```text
mcp__ida-pro-mcp__find_regex pattern="%s %s @ %s:"
```

`Host_Say` logs every broadcast chat message to the console/log using a format string of the shape
`"%s %s @ %s: "` (e.g. `"<player> say[_team]* @ <lobby/lobbyid>: "`-style console relay tag), which is unique in
the binary.

> Linux 14168 reference: the string `"%s %s @ %s: "` is at `0x91b835`.

### 2. Get the Referencing Function

```text
mcp__ida-pro-mcp__xrefs_to addr="0x91b835"
```

The string has exactly one xref; its containing function is `Host_Say`.

> Linux 14168 reference: `0x91b835` is referenced from `0x17ece73`, inside the function starting at `0x17ec540`
> (size `0xa0e`).

### 3. Sanity-Check the Candidate

```text
mcp__ida-pro-mcp__decompile addr="0x17ec540"
```

Confirm the decompilation is consistent with `Host_Say`'s known role: takes a client/command-context pointer, a
parsed command-args structure, and flags distinguishing team-say from all-chat; builds/sanitizes the chat text,
applies mute/gag and dead-talk restrictions, then relays the formatted message to the console and to recipients
via the networking layer.

### 4. Generate Function Signature

**ALWAYS** Use SKILL `/generate-signature-for-function` with `addr=0x17ec540` to generate a robust and unique
`func_sig`.

> Linux 14168 reference: generated signature is `55 48 89 E5 41 57 49 89 F7 41 56 41 55 41 89 D5` — already
> unique across the binary at this length.

### 5. Write IDA Analysis Output as YAML

**ALWAYS** Use SKILL `/write-func-as-yaml` to write the analysis results.

Required parameters:
- `func_name`: `Host_Say`
- `func_addr`: `0x17ec540`
- `func_sig`: The validated signature from step 4

## Function Characteristics

- **Purpose**: Handles the `say`/`say_team` command path — validates/sanitizes chat text, applies mute/gag and
  dead-talk rules, and relays the message to the console log and to the appropriate set of recipients.
- **Binary**: `server.dll` / `libserver.so`
- **Parameters**: `(unsigned __int8 *pEntityOrClient, int *pArgsOrCookie, unsigned __int8 bTeamOnly, unsigned int
  a4, __int64 a5)` (observed decompiled shape; exact semantic naming of the trailing parameters is not confirmed
  beyond "command context/flags").
- **Return value**: `void`.

## Discovery Strategy

1. `Host_Say` unconditionally logs each processed chat message using the distinctive format string
   `"%s %s @ %s: "`, which does not appear anywhere else in the binary.
2. The string has a single xref, so its containing function is unambiguous.
3. The candidate's parameter shape (client/command context + team-only flag) and body (text sanitization, mute
   checks, console relay) match `Host_Say`'s known behavior.

This is robust because the anchor string is a literal, verbatim format string that survives recompilation and
refactoring as long as the log format itself is unchanged, and it has a single unambiguous xref.

## Output YAML Format

The output YAML filename depends on the platform:
- `server.dll` -> `Host_Say.windows.yaml`
- `libserver.so` -> `Host_Say.linux.yaml`

Fields: `func_name`, `func_va`, `func_rva`, `func_size`, `func_sig`.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in tools →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.