客戶端發送結構體 gksakura(含 int a; char b[32];,共 36 字節),服務端收到後回覆 "get it!"(8 字節),但客戶端 recv 陷塞或收到亂碼。
| 方向 | 代碼 | 實際數據長度 | 傳入長度 | 後果 |
|---|---|---|---|---|
| 客戶端發送 | send((char*)&gk, 128) | 36 字節 | 128 | 讀越界,發送垃圾內存 |
| 客戶端接收 | recv(ans, 128) | 8 字節 | 128 | 寫越界,棧損壞 |
| 服務端接收 | recv((char*)&gk, 128) | 36 字節 | 128 | 寫越界 |
| 服務端發送 | send(ans, 128) | 8 字節 | 128 | 讀越界 |
// 客戶端
auto errcode = gksock->send((char*)&gk, sizeof(gk)); // 36
gksock->recv(ans, sizeof(ans)); // 64
// 服務端
errcode = recv(sClient, (char*)&gk, sizeof(gk), 0); // 36
errcode = send(sClient, ans, strlen(ans), 0); // 8 (不含 \0) 或 sizeof(ans)
sizeof(結構體變量) 或 strlen(字符串),拒絕魔數。/RTCs (棧框檢查) 或 AddressSanitizer,自動捕獲越界。