谁熟悉暴雪的mpq文件的格式?

我在用mangos的ad.exe解压wow的2.4.3版的地图的时候,总是在41%的时候开始报错,然后到44%左右的时候死在memcpy中。
我把libmpq/commom.cpp中的

  /* Get current block length */
  if (mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESSED) {
   blocksize = mpq_f->blockpos[index + 1] - mpq_f->blockpos[index];
  }

改为:

  /* Get current block length */
  if (mpq_f->mpq_b->flags & LIBMPQ_FILE_COMPRESSED) {
   size_t newblocksize = mpq_f->blockpos[index + 1] - mpq_f->blockpos[index];
   assert(newblocksize<0x80000000);
   blocksize=newblocksize;
  }

结果遇到assert,发现newblocksize = 0xbcc06384,blocksize = 0x00001000
也就是说,尽管设置了LIBMPQ_FILE_COMPRESSED,但是并不是压缩的,导致后面用memcpy复制一个大小为0xbcc06384的块。
新版本的libmpq(0.4.2)和mangos中相差很大。我在试图把0.4.2的libmpq移植到win下。

此博客中的热门博文

少写代码,多读别人写的代码

在windows下使用llvm+clang

tensorflow distributed runtime初窥