µ±Ç°Î»Öà : 145zÓÎÏ·Õ¾¡¡|¡¡ÈÈѪ´«Ææ¡¡|¡¡¼¼Êõ½Ì³Ì¡¡|¡¡

½âÎö´«ÆæM2ÒýÇæÇл»ºó³öÏÖµÄÒì³£´íÎó£ºôá·çÓëÇå·çM2²»¼æÈÝÐÔ·ÖÎö

Èȶȣº
## Ò»¡¢´íÎó¸ùÔ´Éî¶È½âÎö

### 1. ´íÎóÈÕÖ¾¹Ø¼üÐÅÏ¢½âÂë
¸ù¾ÝÌṩµÄ´íÎóÐÅÏ¢£¬ºËÐÄÎÊÌ⼯ÖÐÔÚ£º
```
TPlayObject::Run -> Operate 2 # Ident:1006
Sender:332050640 wP:0 nP1:202951097 nP2:0 np3:0
Msg:lXOHwHVwj[h
Invalid pointer operation
```


**¼¼Êõ½âÂë**£º
- `Operate 2`£ºÓÎÏ·¶ÔÏó²Ù×÷Ö¸Á¶ÔÓ¦ÎïÆ·Ê¹ÓÃ/¼¼ÄÜÊÍ·Å£©
- `Ident:1006`£º²Ù×÷ÂëÓ³Éäµ½`QFunction-0.txt`ÖеÄ`[@StdModeFuncX]`¶Î
- `lXOHwHVwj[h`£ºÃÜÎÄÖ¸ÁÐè½âÃÜΪ¾ßÌå½Å±¾º¯Êý£©

---

## ¶þ¡¢Îå´óºËÐÄÎÊÌâÅŲ鷽Ïò

### 1. ½Å±¾ÄÚ´æ¹ÜÀí²îÒì
ôá·çÓëÇå·çÒýÇæ¶Ô½Å±¾±äÁ¿µÄÄÚ´æ´¦Àí»úÖÆ´æÔÚ±¾ÖÊÇø±ð£º

| ÒýÇæÌØÐÔ | ôá·çM2 | Çå·çM2 |
|-------------------|-----------------------|-----------------------|
| ×Ö·û´®´¦Àí | ×Ô¶¯À¬»ø»ØÊÕ | ÊÖ¶¯ÄÚ´æÊÍ·Å |
| Ö¸Õë´«µÝ | ÔÊÐí¿ç½Å±¾´«µÝ | Ñϸñ×÷ÓÃÓòÏÞÖÆ |
| Êý×éÔ½½ç | ×Ô¶¯À©ÈÝ | ´¥·¢Òì³£ |


**µäÐÍ´íÎó½Å±¾**£º
```lua
[@StdModeFunc1006]
#IF
#ACT
MOV S0 "²âÊÔ" ; ôá·ç×Ô¶¯¹ÜÀíÄÚ´æ
MOV S1 S0 ; Çå·ç¿ÉÄÜÒý·¢Ò°Ö¸Õë
```


**ÐÞ¸´·½°¸**£º
```lua
[@StdModeFunc1006]
#IF
#ACT
FormatStr S0 "²âÊÔ" ; ʹÓøñʽ»¯º¯Êý
CopyStr S1 S0 ; ÏÔʽ¿½±´×Ö·û´®
```


---

### 2. Êý¾Ý¿â×ֶμæÈÝÐÔÎÊÌâ
¶Ô±È¼ì²é`StdItems.DB`µÄIdent=1006ÎïÆ·×ֶΣº

| ×Ö¶ÎÃû | ôá·çÖµ | Çå·çÒªÇó |
|--------------|---------------------|-----------------------|
| StdMode | 1006 | 1006 |
| NeedIdentify | 0 | ±ØÐë≥1£¨´¥·¢¼ø¶¨£© |
| AniCount | ×Ö·û´®ÀàÐÍ | ±ØÐëΪÕûÊý |


**ÐÞ¸´·½°¸**£º
```sql
UPDATE StdItems SET
NeedIdentify=1,
AniCount=CAST(AniCount AS INTEGER)
WHERE StdMode=1006;
```


---

### 3. ²å¼þDLL¼æÈÝÐÔ³åÍ»
Çå·çM2¶ÔµÚÈý·½²å¼þµÄÄÚ´æ¹ÜÀí¸üÑϸñ£º

| ²å¼þÀàÐÍ | ·çÏÕµã | ¼ì²â·½·¨ |
|-------------|-----------------------|-----------------------|
| ·´Íâ¹Ò²å¼þ | HookÁËSend/Recvº¯Êý | ʹÓÃProcess Monitor¼à¿ØDLL¼ÓÔØ |
| ÌØÐ§²å¼þ | δÊÍ·ÅDirectX×ÊÔ´ | ¼ì²édx_handleй© |


**ÅŲ鲽Öè**£º
1. Çå¿Õ`Plugins`Ŀ¼²âÊÔ
2. Öð¸ö¼ÓÔØ²å¼þ¹Û²ì±¨´íƵÂÊ

---

### 4. ÓÎϷЭÒé°æ±¾²»Æ¥Åä
Çå·çM2¶Ô·â°üУÑé¸üÑϸñ£º

| ЭÒéÌØÕ÷ | ôá·çM2 | Çå·çM2 |
|-------------|-----------------------|-----------------------|
| ¼ÓÃÜËã·¨ | XOR+¼òµ¥Ð£ÑéºÍ | CRC32+TEA¼ÓÃÜ |
| ·â°ü³¤¶È | ÔÊÐí±10%Îó²î | ÑϸñУÑé |


**½â¾ö·½°¸**£º
1. ʹÓÃWiresharkץȡ²Ù×÷Âë1006µÄ·â°ü
2. ¶Ô±È¿Í»§¶ËÓë·þÎñ¶ËЭÒé°æ±¾

---

### 5. ¶àÏß³Ì×ÊÔ´¾ºÕù
Çå·çM2²ÉÓøü¼¤½øµÄÏ̵߳÷¶È²ßÂÔ£º

```mermaid
graph LR
A[Ö÷Ïß³Ì] --> B[ÍøÂçÏß³Ì]
A --> C[Âß¼­Ïß³Ì]
C --> D[Êý¾Ý¿âÏß³Ì]
B --> C
```


**¾ºÕù³¡¾°**£º
- ͬһ½ÇɫͬʱÔÚ¶à¸öÏ̲߳Ù×÷×°±¸À¸
- ¿ìËÙÇл»µØÍ¼Ê±´¥·¢Òì²½¼ÓÔØ

**ÐÞ¸´·½°¸**£º
```c++
// α´úÂëʾÀý£ºÔö¼Ó»¥³âËø
std::mutex g_itemMutex;

void OperateItem(int playerID) {
std::lock_guard<std::mutex> lock(g_itemMutex);
// ÎïÆ·²Ù×÷Âß¼­
}
```


---

## Èý¡¢·Ö²½½â¾ö·½°¸

### ²½Öè1£º½Å±¾°²È«¼Ó¹Ì
1. ÔÚ`QFunction-0.txt`Í·²¿Ìí¼Ó£º
```lua
[@OnMemoryCheck]
#IF
#ACT
SetMemoryCheckLevel 3 ; ¿ªÆôÑϸñÄÚ´æ¼ì²é
```


2. ÐÞ¸ÄËùÓÐ`MOV`Ö¸ÁîΪ°²È«°æ±¾£º
```diff
- MOV S0 "²âÊÔ"
+ FormatStr S0 "²âÊÔ"
```


### ²½Öè2£ºÊý¾Ý¿âÓÅ»¯
```sql
-- ÇåÀíÎÞЧָÕëÒýÓÃ
DELETE FROM StdItems WHERE StdMode NOT IN (SELECT Ident FROM ItemType);
```


### ²½Öè3£ºÒýÇæ²ÎÊýµ÷ÓÅ
ÔÚ`!Setup.txt`ÖÐÔö¼Ó£º
```ini
[Performance]
MaxCacheSize=1024 ; Ôö´óÄڴ滺´æ
EnableThreadLock=1 ; ÆôÓÃÏß³ÌËø
```


---

## ËÄ¡¢³¤Ð§Ô¤·À»úÖÆ

### 1. ×Ô¶¯»¯²âÊÔ¿ò¼Ü
```python
# ѹÁ¦²âÊԽű¾Ê¾Àý
import socket
import threading

def send_packet():
# ¹¹Ôì²Ù×÷Âë1006µÄ·â°ü
pass

for i in range(100):
t = threading.Thread(target=send_packet)
t.start()
```


### 2. ÄÚ´æ¼à¿Ø·½°¸
ʹÓÃWindbgÉèÖöϵ㣺
```
bp M2Server!TPlayObject::Run ".echo 'ÄÚ´æÒì³£'; gc"
```


---

## Îå¡¢ÆóÒµ¼¶ÔÖ±¸½¨Òé

### 1. Ë«ÒýÇæ»ìºÏ¼Ü¹¹
```mermaid
graph TB
A[¿Í»§¶Ë] --> B{¸ºÔؾùºâ}
B --> C[ôá·çM2¼¯Èº]
B --> D[Çå·çM2¼¯Èº]
C --> E[¹²ÏíÊý¾Ý¿â]
D --> E
```


### 2. »Ò¶È·¢²¼²ßÂÔ

| ½×¶Î | Ä¿±êÓû§ | ÒýÇæ°æ±¾ |
|--------|---------------------|-------------------|
| µÚÒ»½×¶Î | ÄÚ²âÍæ¼Ò(5%) | Çå·çM2+ÑϸñÈÕÖ¾ |
| µÚ¶þ½×¶Î | ºËÐÄÍæ¼Ò(20%) | Ë«ÒýÇæ²¢ÐÐ |
| µÚÈý½×¶Î | È«Á¿Óû§ | ¸ù¾ÝÎȶ¨ÐÔÑ¡Ôñ |


---

## ½áÓ¹¹½¨Îȶ¨´«ÆæÉú̬µÄÖÕ¼«·¨Ôò
½â¾öÇå·çM2µÄÖ¸ÕëÒì³£ÎÊÌâÐèÒª´Ó**ÄÚ´æ¹ÜÀí→Ï̵߳÷¶È→ЭÒéУÑé**¶àά¶È½éÈë¡£½¨Òé²ÉÓÃÒÔÏ»ƽð·¨Ôò£º
1. **½Å±¾¹æ·¶**£ºËùÓÐ×Ö·û´®²Ù×÷±ØÐëʹÓÃ`FormatStr/CopyStr`
2. **Êý¾Ý¿âÔ¼Êø**£ºÎª¹Ø¼ü±íÔö¼Ó`CHECK`Ô¼Êø
3. **ѹÁ¦²âÊÔ**£ºÃ¿ÈÕÖ´ÐÐ10Íò´Î²Ù×÷Âë1006µÄרÏî²âÊÔ
4. **¼à¿ØÔ¤¾¯**£ºÉèÖÃÄÚ´æÊ¹ÓÃÂÊ£¾80%×Ô¶¯¸æ¾¯

ͨ¹ý³ÖÐø¼¯³É£¨ÈçJenkins£©¹¹½¨"´úÂëÌá½»→×Ô¶¯»¯²âÊÔ→»Ò¶È·¢²¼"µÄÍêÕû±Õ»·£¬¿É´Ó¸ù±¾ÉÏÏû³ýż·¢±¨´íÎÊÌ⣬´òÔìÁã¹ÊÕϵĴ«ÆæÓÎÏ·»·¾³¡£

#### ´íÎóÏÖÏóÃèÊö
¸ù¾ÝÌṩµÄÈÕÖ¾ÐÅÏ¢£¬ÎÒÃÇ¿ÉÒÔ¿´µ½Èçϱ¨´í£º
```
2007-4-22 20:38:10 [Exception] TPlayObject::Run -> Operate 2 # Ìáʾ£ºÎ£ÏÕÈË Ident:1006 Sender:332050640 wP:0 nP1:202951097 nP2:0 np3:0 Msg:lXOHwHVwj[h
2007-4-22 20:38:10 Invalid pointer operation
...
```
ÕâЩ´íÎóÐÅÏ¢±íÃ÷£¬ÔÚÖ´ÐÐijЩÓÎÏ·²Ù×÷ʱ£¬³ÌÐòÓöµ½ÁËÎÞЧָÕë²Ù×÷£¨Invalid pointer operation£©£¬Õâͨ³£Òâζ×ų¢ÊÔ·ÃÎÊÒ»¸öδ³õʼ»¯»òÒѾ­±»ÊͷŵÄÄÚ´æµØÖ·¡£

#### ¿ÉÄÜÔ­Òò·ÖÎö
1. **½Å±¾²»¼æÈÝÐÔ**
- ôá·çM2ºÍÇå·çM2ʹÓõĽű¾ÓïÑÔ¿ÉÄÜ´æÔÚ²îÒ죬µ¼ÖÂÔ­±¾ÔÚôá·çM2ÏÂÕý³£¹¤×÷µÄ½Å±¾ÔÚÇå·çM2»·¾³ÏÂÎÞ·¨ÕýÈ·½âÊÍ»òÖ´ÐС£

2. **ÄÚ´æ¹ÜÀí²îÒì**
- ²»Í¬°æ±¾µÄM2ÒýÇæ¿ÉÄܲÉÓò»Í¬µÄÄÚ´æ¹ÜÀíºÍÀ¬»ø»ØÊÕ»úÖÆ£¬µ¼ÖÂijЩÇé¿öÏ£¬¶ÔÏóÉúÃüÖÜÆÚ¹ÜÀí³öÏÖÎÊÌ⣬´Ó¶øÒý·¢ÎÞЧָÕë²Ù×÷´íÎó¡£

3. **ÅäÖÃÎļþ³åÍ»**
- Èç¹ûÅäÖÃÎļþûÓÐÕë¶ÔÐÂÒýÇæ½øÐÐÊʵ±µ÷Õû£¬ÀýÈç·¾¶ÉèÖá¢Êý¾Ý¿âÁ¬½Ó²ÎÊýµÈ£¬Ò²¿ÉÄÜÒýÆðÀàËÆµÄÔËÐÐʱ´íÎó¡£

4. **²å¼þ»òÀ©Õ¹ÎÊÌâ**
- ijЩµÚÈý·½²å¼þ»òÀ©Õ¹¿ÉÄÜרÃÅΪij¸öÌØ¶¨°æ±¾µÄM2ÒýÇæÉè¼Æ£¬Ç¨ÒƵ½ÁíÒ»¸ö°æ±¾ºó£¬ÓÉÓڽӿڱ仯»ò¹¦ÄÜȱʧ¶øµ¼Ö´íÎó¡£

#### ½â¾ö·½°¸½¨Òé
ΪÁËÅŲ鲢½â¾öÕâ¸öÎÊÌ⣬¿ÉÒÔ²ÉÈ¡ÒÔϲ½Ö裺

1. **¼ì²é½Å±¾¼æÈÝÐÔ**
- ¶Ô±ÈÁ½¸ö°æ±¾Ö®¼äµÄ½Å±¾²îÒì£¬ÌØ±ðÊÇÄÇÐ©Éæ¼°Íæ¼Ò½»»¥¡¢ÎïÆ·½»Ò׵ȹ¦ÄܵĺËÐĽű¾£¬È·±£ËüÃÇ·ûºÏÇå·çM2µÄÒªÇó¡£

2. **ÓÅ»¯ÄÚ´æ¹ÜÀí**
- µ÷ÕûÓÎÏ·Âß¼­ÒÔ±ÜÃâDZÔÚµÄÄÚ´æÐ¹Â©µã£¬±ÈÈçÈ·±£ËùÓж¯Ì¬·ÖÅäµÄ¶ÔÏó¶¼±»Í×ÉÆÊÍ·Å£¬ÌرðÊÇÔڸ߲¢·¢³¡¾°Ï¡£

3. **¸üÐÂÅäÖÃÎļþ**
- ¸ù¾ÝÇå·çM2µÄ¾ßÌåÐèÇóÖØÐÂÉó²é²¢ÐÞ¸ÄÏà¹ØÅäÖÃÎļþ£¬È·±£Â·¾¶¡¢È¨ÏÞºÍÆäËû¹Ø¼ü²ÎÊýÉèÖÃ׼ȷÎÞÎó¡£

4. **²âÊÔÓëµ÷ÊÔ**
- ÀûÓÿª·¢¹¤¾ß¶ÔÒÉËÆÎÊÌâÇøÓò½øÐÐÏêϸ²âÊÔ£¬Öð²½ËõСÎÊÌⷶΧֱÖÁÕÒµ½È·ÇÐÔ­Òò¡£
- ¿ªÆôÏêϸµÄÈÕÖ¾¼Ç¼¹¦ÄÜ£¬ÒÔ±ã¸üºÃµØ×·×Ù´íÎó·¢ÉúµÄÉÏÏÂÎÄ»·¾³¡£

#### ½áÂÛ
ͨ¹ýÉÏÊö·ÖÎö¿ÉÒÔ¿´³ö£¬ËäÈ»ôá·çM2ºÍÇå·çM2¶¼ÊÇ·þÎñÓÚ¡¶ÈÈѪ´«Ææ¡·µÄÇ¿´óÒýÇæ£¬µ«ÓÉÓÚ¸÷×ÔʵÏÖϸ½ÚÉϵIJ»Í¬£¬Ö±½ÓÌæ»»¿ÉÄܵ¼Ö¼æÈÝÐÔÎÊÌ⡣ΪÁ˽â¾öµ±Ç°Óöµ½µÄ´íÎó£¬ÐèÒª×Ðϸ¶Ô±ÈÁ½ÕߵIJîÒ죬ÓÈÆäÊǹØ×¢½Å±¾±àд¹æ·¶¡¢ÄÚ´æ¹ÜÀíģʽÒÔ¼°ÅäÖÃÎļþÉ趨µÈ·½Ã档ϣÍû±¾ÎÄÌṩµÄÖ¸µ¼Äܹ»°ïÖúÄã˳Àû½â¾öÎÊÌ⣬»Ö¸´·þÎñÆ÷µÄÎȶ¨ÔËÐС£