- Mesaj
- 484
- Çözümler
- 25
- Beğeni
- 122
- Puan
- 509
- Ticaret Puanı
- 0
Merhaba,
64 bit FreeBSD 14.1 sunucuda 32 bit modunda derleme yapmaya çalışıyorum. Makefile "-m32" ekledim. Source için gerekli tüm 32 bit libleri aldım. Derleme başarılı oldu ancak oyuna start verdiğimde db çöküyor ve db.core oluşuyor. Db başlıyor. Auth başlıyor. Ch1, Ch2, Ch99 kanallarını açarken db çöküyor ve db.core oluşuyor. Gdb ile kontrol ettim. ClientManager.cpp içerisindeki CClientManager::QUERY_BOOT fonksiyonundan kaynaklandığını söylüyor. Anladığım kadarıyla paket boyut sınırını aşıyor. #define MAX_PACKET_SIZE ekleyerek sınır verdim. Sınır verdiğimde db çökmüyor ve db_core oluşmuyor ancak oyuna erişemiyorum.
Gdb Çıktıları
İlgili Kod
DB Syslog
64 bit FreeBSD 14.1 sunucuda 32 bit modunda derleme yapmaya çalışıyorum. Makefile "-m32" ekledim. Source için gerekli tüm 32 bit libleri aldım. Derleme başarılı oldu ancak oyuna start verdiğimde db çöküyor ve db.core oluşuyor. Db başlıyor. Auth başlıyor. Ch1, Ch2, Ch99 kanallarını açarken db çöküyor ve db.core oluşuyor. Gdb ile kontrol ettim. ClientManager.cpp içerisindeki CClientManager::QUERY_BOOT fonksiyonundan kaynaklandığını söylüyor. Anladığım kadarıyla paket boyut sınırını aşıyor. #define MAX_PACKET_SIZE ekleyerek sınır verdim. Sınır verdiğimde db çökmüyor ve db_core oluşmuyor ancak oyuna erişemiyorum.
Gdb Çıktıları
İlgili Kod
ClientManager.cpp:
void CClientManager::QUERY_BOOT (CPeer* peer, TPacketGDBoot* p)
{
const BYTE bPacketVersion = 6; // BOOT 패킷이 바뀔때마다 번호를 올리도록 한다.
std::vector<tAdminInfo> vAdmin;
std::vector<std::string> vHost;
__GetHostInfo (vHost);
__GetAdminInfo (p->szIP, vAdmin);
sys_log (0, "QUERY_BOOT : AdminInfo (Request ServerIp %s) ", p->szIP);
DWORD dwPacketSize =
sizeof (DWORD) +
sizeof (BYTE) +
sizeof (WORD) + sizeof (WORD) + sizeof (TMobTable) * m_vec_mobTable.size() +
sizeof (WORD) + sizeof (WORD) + sizeof (TItemTable) * m_vec_itemTable.size() +
sizeof (WORD) + sizeof (WORD) + sizeof (TShopTable) * m_iShopTableSize +
sizeof (WORD) + sizeof (WORD) + sizeof (TSkillTable) * m_vec_skillTable.size() +
sizeof (WORD) + sizeof (WORD) + sizeof (TRefineTable) * m_iRefineTableSize +
sizeof (WORD) + sizeof (WORD) + sizeof (TItemAttrTable) * m_vec_itemAttrTable.size() +
sizeof (WORD) + sizeof (WORD) + sizeof (TItemAttrTable) * m_vec_itemRareTable.size() +
sizeof (WORD) + sizeof (WORD) + sizeof (TBanwordTable) * m_vec_banwordTable.size() +
sizeof (WORD) + sizeof (WORD) + sizeof (building::TLand) * m_vec_kLandTable.size() +
sizeof (WORD) + sizeof (WORD) + sizeof (building::TObjectProto) * m_vec_kObjectProto.size() +
sizeof (WORD) + sizeof (WORD) + sizeof (building::TObject) * m_map_pkObjectTable.size() +
sizeof (time_t) +
sizeof (WORD) + sizeof (WORD) + sizeof (TItemIDRangeTable)*2 +
//ADMIN_MANAGER
sizeof (WORD) + sizeof (WORD) + 16 * vHost.size() +
sizeof (WORD) + sizeof (WORD) + sizeof (tAdminInfo) * vAdmin.size() +
//END_ADMIN_MANAGER
sizeof (WORD);
peer->EncodeHeader (HEADER_DG_BOOT, 0, dwPacketSize);
peer->Encode (&dwPacketSize, sizeof (DWORD));
peer->Encode (&bPacketVersion, sizeof (BYTE));
sys_log (0, "BOOT: PACKET: %d", dwPacketSize);
sys_log (0, "BOOT: VERSION: %d", bPacketVersion);
sys_log (0, "sizeof(TMobTable) = %d", sizeof (TMobTable));
sys_log (0, "sizeof(TItemTable) = %d", sizeof (TItemTable));
sys_log (0, "sizeof(TShopTable) = %d", sizeof (TShopTable));
sys_log (0, "sizeof(TSkillTable) = %d", sizeof (TSkillTable));
sys_log (0, "sizeof(TRefineTable) = %d", sizeof (TRefineTable));
sys_log (0, "sizeof(TItemAttrTable) = %d", sizeof (TItemAttrTable));
sys_log (0, "sizeof(TItemRareTable) = %d", sizeof (TItemAttrTable));
sys_log (0, "sizeof(TBanwordTable) = %d", sizeof (TBanwordTable));
sys_log (0, "sizeof(TLand) = %d", sizeof (building::TLand));
sys_log (0, "sizeof(TObjectProto) = %d", sizeof (building::TObjectProto));
sys_log (0, "sizeof(TObject) = %d", sizeof (building::TObject));
//ADMIN_MANAGER
sys_log (0, "sizeof(tAdminInfo) = %d * %d ", sizeof (tAdminInfo) * vAdmin.size());
//END_ADMIN_MANAGER
peer->EncodeWORD (sizeof (TMobTable));
peer->EncodeWORD (m_vec_mobTable.size());
peer->Encode (&m_vec_mobTable[0], sizeof (TMobTable) * m_vec_mobTable.size());
peer->EncodeWORD (sizeof (TItemTable));
peer->EncodeWORD (m_vec_itemTable.size());
peer->Encode (&m_vec_itemTable[0], sizeof (TItemTable) * m_vec_itemTable.size());
peer->EncodeWORD (sizeof (TShopTable));
peer->EncodeWORD (m_iShopTableSize);
peer->Encode (m_pShopTable, sizeof (TShopTable) * m_iShopTableSize);
peer->EncodeWORD (sizeof (TSkillTable));
peer->EncodeWORD (m_vec_skillTable.size());
peer->Encode (&m_vec_skillTable[0], sizeof (TSkillTable) * m_vec_skillTable.size());
peer->EncodeWORD (sizeof (TRefineTable));
peer->EncodeWORD (m_iRefineTableSize);
peer->Encode (m_pRefineTable, sizeof (TRefineTable) * m_iRefineTableSize);
peer->EncodeWORD (sizeof (TItemAttrTable));
peer->EncodeWORD (m_vec_itemAttrTable.size());
peer->Encode (&m_vec_itemAttrTable[0], sizeof (TItemAttrTable) * m_vec_itemAttrTable.size());
peer->EncodeWORD (sizeof (TItemAttrTable));
peer->EncodeWORD (m_vec_itemRareTable.size());
peer->Encode (&m_vec_itemRareTable[0], sizeof (TItemAttrTable) * m_vec_itemRareTable.size());
peer->EncodeWORD (sizeof (TBanwordTable));
peer->EncodeWORD (m_vec_banwordTable.size());
peer->Encode (&m_vec_banwordTable[0], sizeof (TBanwordTable) * m_vec_banwordTable.size());
peer->EncodeWORD (sizeof (building::TLand));
peer->EncodeWORD (m_vec_kLandTable.size());
peer->Encode (&m_vec_kLandTable[0], sizeof (building::TLand) * m_vec_kLandTable.size());
peer->EncodeWORD (sizeof (building::TObjectProto));
peer->EncodeWORD (m_vec_kObjectProto.size());
peer->Encode (&m_vec_kObjectProto[0], sizeof (building::TObjectProto) * m_vec_kObjectProto.size());
peer->EncodeWORD (sizeof (building::TObject));
peer->EncodeWORD (m_map_pkObjectTable.size());
itertype (m_map_pkObjectTable) it = m_map_pkObjectTable.begin();
while (it != m_map_pkObjectTable.end())
{
peer->Encode ((it++)->second, sizeof (building::TObject));
}
time_t now = time (0);
peer->Encode (&now, sizeof (time_t));
TItemIDRangeTable itemRange = CItemIDRangeManager::instance().GetRange();
TItemIDRangeTable itemRangeSpare = CItemIDRangeManager::instance().GetRange();
peer->EncodeWORD (sizeof (TItemIDRangeTable));
peer->EncodeWORD (1);
peer->Encode (&itemRange, sizeof (TItemIDRangeTable));
peer->Encode (&itemRangeSpare, sizeof (TItemIDRangeTable));
peer->SetItemIDRange (itemRange);
peer->SetSpareItemIDRange (itemRangeSpare);
//ADMIN_MANAGER
peer->EncodeWORD (16);
peer->EncodeWORD (vHost.size());
for (size_t n = 0; n < vHost.size(); ++n)
{
peer->Encode (vHost[n].c_str(), 16);
sys_log (0, "GMHosts %s", vHost[n].c_str());
}
peer->EncodeWORD (sizeof (tAdminInfo));
peer->EncodeWORD (vAdmin.size());
for (size_t n = 0; n < vAdmin.size(); ++n)
{
peer->Encode (&vAdmin[n], sizeof (tAdminInfo));
sys_log (0, "Admin name %s ConntactIP %s", vAdmin[n].m_szName, vAdmin[n].m_szContactIP);
}
//END_ADMIN_MANAGER
peer->EncodeWORD (0xffff);
}
DB Syslog
DB Syslog:
Nov 25 09:50:41.824320 :: BOOT: PACKET: 1456295
Nov 25 09:50:41.824324 :: BOOT: VERSION: 6
Nov 25 09:50:41.824328 :: sizeof(TMobTable) = 255
Nov 25 09:50:41.824332 :: sizeof(TItemTable) = 160
Nov 25 09:50:41.824336 :: sizeof(TShopTable) = 529
Nov 25 09:50:41.824340 :: sizeof(TSkillTable) = 1475
Nov 25 09:50:41.824344 :: sizeof(TRefineTable) = 53
Nov 25 09:50:41.824371 :: sizeof(TItemAttrTable) = 69
Nov 25 09:50:41.824376 :: sizeof(TItemRareTable) = 69
Nov 25 09:50:41.824379 :: sizeof(TBanwordTable) = 25
Nov 25 09:50:41.824383 :: sizeof(TLand) = 36
Nov 25 09:50:41.824387 :: sizeof(TObjectProto) = 96
Nov 25 09:50:41.824390 :: sizeof(TObject) = 40
Nov 25 09:50:41.824394 :: sizeof(tAdminInfo) = 104 * 555819504
Son düzenleme: