Yardım 64 Bit Sunucuda 32 Bit Modunda Derleme Sonrası Db.core

  • Konuyu açan Konuyu açan nebnebsen
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 12
  • Gösterim Gösterim 93
Konu sahibi bu konuda soru soruyor. Sorusu ile ilgili bilgisi olanların yanıtlamasını bekliyor.

nebnebsen

Geliştirici
Geliştirici
MT Üye
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ı

Ekran görüntüsü 2024-11-25 125529.webp

Ekran görüntüsü 2024-11-25 125617.webp


İlgili Kod

ClientManager.cpp:
Genişlet Daralt Kopyala
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:
Genişlet Daralt Kopyala
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:
DB Makefile:
Genişlet Daralt Kopyala
MAKE = gmake
CC = clang++-devel

INCDIR = -I../../../ServerExtern-FreeBSD/include
LIBDIR = -L../../../ServerExtern-FreeBSD/lib
BINDIR = ../../Bin
OBJDIR = .obj

BSD_VERSION = $(shell freebsd-version | grep -oE '[0-9]+\.[0-9]+')
PLATFORM = $(shell file /bin/ls | cut -d' ' -f3 | cut -d'-' -f1)

$(shell if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi)

TARGET = $(BINDIR)/db_$(PLATFORM)

CFLAGS = -m32 -g -Wall -O2 -pipe -fno-rtti -mtune=i686 -fno-exceptions -pthread -D_THREAD_SAFE

# Project Library
LIBDIR += -L../../libthecore/lib -L../../libsql -L../../libpoly -L../../libgame/lib
LIBS = -lthecore -lsql -lpoly -lgame -lm -lz

# MySQL
LIBS += ../../../ServerExtern-FreeBSD/lib/libmysqlclient.a ../../../ServerExtern-FreeBSD/lib/libz.a ../../../ServerExtern-FreeBSD/lib/libzstd.a

#OpenSSL
LIBS += -lunwind -lssl -lcrypto

SRCS =    Config.cpp NetBase.cpp Peer.cpp PeerBase.cpp Main.cpp Lock.cpp DBManager.cpp \
        Cache.cpp LoginData.cpp ClientManager.cpp ClientManagerPlayer.cpp ClientManagerLogin.cpp \
        ClientManagerBoot.cpp ClientManagerParty.cpp ClientManagerGuild.cpp GuildManager.cpp \
        PrivManager.cpp MoneyLog.cpp ItemAwardManager.cpp ClientManagerEventFlag.cpp Marriage.cpp \
        ItemIDRangeManager.cpp ClientManagerHorseName.cpp \
        ProtoReader.cpp CsvReader.cpp

OBJS = $(SRCS:%.cpp=$(OBJDIR)/%.o)

default: $(TARGET)

$(TARGET): $(OBJS)
    @echo -e "\033[0;32m [---] \033[0m        \033[0;33m Linking:\033[0m" $(TARGET)
    @$(CC) $(CFLAGS) $(LIBDIR) $(OBJS) $(LIBS) -o $(TARGET)

$(OBJDIR)/%.o: %.cpp
    @echo -e "\033[0;32m [---] \033[0m        \033[0;33m Compiling:\033[0m" $<
    @$(CC) $(CFLAGS) $(INCDIR) -c $< -o $@

$(OBJDIR):
    @mkdir $(OBJDIR)

clean:
    @rm -f $(OBJS) $(BINDIR)/db_*

dep:
    @touch Depend
    makedepend -fDepend $(INCDIR) -I/usr/include/c++/v1 -p$(OBJDIR)/ $(SRCS) 2> /dev/null

sinclude Depend
 
DB Makefile:
Genişlet Daralt Kopyala
MAKE = gmake
CC = clang++-devel

INCDIR = -I../../../ServerExtern-FreeBSD/include
LIBDIR = -L../../../ServerExtern-FreeBSD/lib
BINDIR = ../../Bin
OBJDIR = .obj

BSD_VERSION = $(shell freebsd-version | grep -oE '[0-9]+\.[0-9]+')
PLATFORM = $(shell file /bin/ls | cut -d' ' -f3 | cut -d'-' -f1)

$(shell if [ ! -d $(OBJDIR) ]; then mkdir $(OBJDIR); fi)

TARGET = $(BINDIR)/db_$(PLATFORM)

CFLAGS = -m32 -g -Wall -O2 -pipe -fno-rtti -mtune=i686 -fno-exceptions -pthread -D_THREAD_SAFE

# Project Library
LIBDIR += -L../../libthecore/lib -L../../libsql -L../../libpoly -L../../libgame/lib
LIBS = -lthecore -lsql -lpoly -lgame -lm -lz

# MySQL
LIBS += ../../../ServerExtern-FreeBSD/lib/libmysqlclient.a ../../../ServerExtern-FreeBSD/lib/libz.a ../../../ServerExtern-FreeBSD/lib/libzstd.a

#OpenSSL
LIBS += -lunwind -lssl -lcrypto

SRCS =    Config.cpp NetBase.cpp Peer.cpp PeerBase.cpp Main.cpp Lock.cpp DBManager.cpp \
        Cache.cpp LoginData.cpp ClientManager.cpp ClientManagerPlayer.cpp ClientManagerLogin.cpp \
        ClientManagerBoot.cpp ClientManagerParty.cpp ClientManagerGuild.cpp GuildManager.cpp \
        PrivManager.cpp MoneyLog.cpp ItemAwardManager.cpp ClientManagerEventFlag.cpp Marriage.cpp \
        ItemIDRangeManager.cpp ClientManagerHorseName.cpp \
        ProtoReader.cpp CsvReader.cpp

OBJS = $(SRCS:%.cpp=$(OBJDIR)/%.o)

default: $(TARGET)

$(TARGET): $(OBJS)
    @echo -e "\033[0;32m [---] \033[0m        \033[0;33m Linking:\033[0m" $(TARGET)
    @$(CC) $(CFLAGS) $(LIBDIR) $(OBJS) $(LIBS) -o $(TARGET)

$(OBJDIR)/%.o: %.cpp
    @echo -e "\033[0;32m [---] \033[0m        \033[0;33m Compiling:\033[0m" $<
    @$(CC) $(CFLAGS) $(INCDIR) -c $< -o $@

$(OBJDIR):
    @mkdir $(OBJDIR)

clean:
    @rm -f $(OBJS) $(BINDIR)/db_*

dep:
    @touch Depend
    makedepend -fDepend $(INCDIR) -I/usr/include/c++/v1 -p$(OBJDIR)/ $(SRCS) 2> /dev/null

sinclude Depend

-mtune=i686 kısmını -march=native olarak değiştir tekrar derle. gmake clean çekmeyi unutma

edit: devel serisi compiler kullanma, clang++-devel kısmını da clang++ ile değiştir
 
-mtune=i686 kısmını -march=native olarak değiştir tekrar derle. gmake clean çekmeyi unutma

edit: devel serisi compiler kullanma, clang++-devel kısmını da clang++ ile değiştir
clang++ ve clang ile denedim ama aynı şekilde db.core oluşuyordu. Dediğiniz -march=native güncellemesini yapıp sonucu söylerim.
 
-mtune=i686 kısmını -march=native olarak değiştir tekrar derle. gmake clean çekmeyi unutma

edit: devel serisi compiler kullanma, clang++-devel kısmını da clang++ ile değiştir
Dediğiniz değişikliği tüm source üzerinde yaptım. Clean çekip build aldım. Sorun devam ediyor. Db.core içeriği aynı.

DB Syslog:
Genişlet Daralt Kopyala
Nov 25 11:26:08.81809 :: BOOT: PACKET: 1456295
Nov 25 11:26:08.81814 :: BOOT: VERSION: 6
Nov 25 11:26:08.81819 :: sizeof(TMobTable) = 255
Nov 25 11:26:08.81822 :: sizeof(TItemTable) = 160
Nov 25 11:26:08.81826 :: sizeof(TShopTable) = 529
Nov 25 11:26:08.81830 :: sizeof(TSkillTable) = 1475
Nov 25 11:26:08.81834 :: sizeof(TRefineTable) = 53
Nov 25 11:26:08.81838 :: sizeof(TItemAttrTable) = 69
Nov 25 11:26:08.81841 :: sizeof(TItemRareTable) = 69
Nov 25 11:26:08.81845 :: sizeof(TBanwordTable) = 25
Nov 25 11:26:08.81849 :: sizeof(TLand) = 36
Nov 25 11:26:08.81852 :: sizeof(TObjectProto) = 96
Nov 25 11:26:08.81856 :: sizeof(TObject) = 40
Nov 25 11:26:08.81859 :: sizeof(tAdminInfo) = 104 * 555819504

BOOT: PACKET: 1456295 ve sizeof(tAdminInfo) = 104 * 555819504 normal mi? Çok büyük sayılar. Bu yüzden db çöküyor olabilir mi?
 
Son düzenleme:
Dediğiniz değişikliği tüm source üzerinde yaptım. Clean çekip build aldım. Sorun devam ediyor. Db.core içeriği aynı.

DB Syslog:
Genişlet Daralt Kopyala
Nov 25 11:26:08.81809 :: BOOT: PACKET: 1456295
Nov 25 11:26:08.81814 :: BOOT: VERSION: 6
Nov 25 11:26:08.81819 :: sizeof(TMobTable) = 255
Nov 25 11:26:08.81822 :: sizeof(TItemTable) = 160
Nov 25 11:26:08.81826 :: sizeof(TShopTable) = 529
Nov 25 11:26:08.81830 :: sizeof(TSkillTable) = 1475
Nov 25 11:26:08.81834 :: sizeof(TRefineTable) = 53
Nov 25 11:26:08.81838 :: sizeof(TItemAttrTable) = 69
Nov 25 11:26:08.81841 :: sizeof(TItemRareTable) = 69
Nov 25 11:26:08.81845 :: sizeof(TBanwordTable) = 25
Nov 25 11:26:08.81849 :: sizeof(TLand) = 36
Nov 25 11:26:08.81852 :: sizeof(TObjectProto) = 96
Nov 25 11:26:08.81856 :: sizeof(TObject) = 40
Nov 25 11:26:08.81859 :: sizeof(tAdminInfo) = 104 * 555819504

BOOT: PACKET: 1456295 ve sizeof(tAdminInfo) = 104 * 555819504 normal mi? Çok büyük sayılar. Bu yüzden db çöküyor olabilir mi?
normalde size yanlış gelse bile en fazla değerin truncated olması gerekir. sen SIGILL hatası alıyorsun, bu normal değil.
 
normalde size yanlış gelse bile en fazla değerin truncated olması gerekir. sen SIGILL hatası alıyorsun, bu normal değil.
#define MAX_PACKET_SIZE ile paketin büyüklüğünü maks. 1mb ayarladığım zaman ch1 açılırken db çökmüyor. Paket boyutlarında bi tuhaflık var gibi ama bilmiyorum.
 
sys_log (0, "BOOT: PACKET: %d", dwPacketSize);
sys_log (0, "sizeof(tAdminInfo) = %d * %d ", sizeof (tAdminInfo) * vAdmin.size());

kısımlarını

sys_log (0, "BOOT: PACKET: %u", dwPacketSize);
sys_log (0, "sizeof(tAdminInfo) = %u * %zu ", sizeof (tAdminInfo), vAdmin.size());

olarak değiştirirseniz doğru logu yazacaktır, ek olarak 381.satırın nereye geldiğinide eklerseniz daha iyi olur
 
sys_log (0, "BOOT: PACKET: %d", dwPacketSize);
sys_log (0, "sizeof(tAdminInfo) = %d * %d ", sizeof (tAdminInfo) * vAdmin.size());

kısımlarını

sys_log (0, "BOOT: PACKET: %u", dwPacketSize);
sys_log (0, "sizeof(tAdminInfo) = %u * %zu ", sizeof (tAdminInfo), vAdmin.size());

olarak değiştirirseniz doğru logu yazacaktır, ek olarak 381.satırın nereye geldiğinide eklerseniz daha iyi olur
381. satır QUERY_BOOT fonksiyonunun kapanış parantezine denk geliyor.

Ekran görüntüsü 2024-11-25 151518.webp
 
sys_log (0, "BOOT: PACKET: %d", dwPacketSize);
sys_log (0, "sizeof(tAdminInfo) = %d * %d ", sizeof (tAdminInfo) * vAdmin.size());

kısımlarını

sys_log (0, "BOOT: PACKET: %u", dwPacketSize);
sys_log (0, "sizeof(tAdminInfo) = %u * %zu ", sizeof (tAdminInfo), vAdmin.size());

olarak değiştirirseniz doğru logu yazacaktır, ek olarak 381.satırın nereye geldiğinide eklerseniz daha iyi olur

Dediğiniz gibi düzenleme sağladım.

DB Syslog:
Genişlet Daralt Kopyala
Nov 25 12:18:58.318592 :: BOOT: PACKET: 1456295
Nov 25 12:18:58.318596 :: BOOT: VERSION: 6
Nov 25 12:18:58.318600 :: sizeof(TMobTable) = 255
Nov 25 12:18:58.318604 :: sizeof(TItemTable) = 160
Nov 25 12:18:58.318607 :: sizeof(TShopTable) = 529
Nov 25 12:18:58.318611 :: sizeof(TSkillTable) = 1475
Nov 25 12:18:58.318615 :: sizeof(TRefineTable) = 53
Nov 25 12:18:58.318618 :: sizeof(TItemAttrTable) = 69
Nov 25 12:18:58.318622 :: sizeof(TItemRareTable) = 69
Nov 25 12:18:58.318671 :: sizeof(TBanwordTable) = 25
Nov 25 12:18:58.318677 :: sizeof(TLand) = 36
Nov 25 12:18:58.318682 :: sizeof(TObjectProto) = 96
Nov 25 12:18:58.318685 :: sizeof(TObject) = 40
Nov 25 12:18:58.318689 :: sizeof(tAdminInfo) = 104 * 1
 
Geri
Üst