Home - cngege/Mod GitHub Wiki

🔧DLL加载失败/崩溃,Bug修复方法

  1. 首先加载DLL,通过日志、附加调试的方法,判断问题
  2. 看看是特征码失效了?
  3. 还是偏移的获取失效了。
  4. 还是其他的比如虚表函数有所变化
  5. 然后通过右侧页面找到相应的,特征码(还是其他的)的获取方法
  6. 逐渐修复直至不再崩溃能够加载UI
  7. 然后再逐渐测试相关功能

🍁添加相关功能

  • 添加任何功能,比如通过Hook某个函数实现
  • 而这个函数通过特征码定位
  • 这个特征码的查找方法,一定要在Wiki中写明
  • 以便其他维护者(这个人也可能是自己)在版本更新后修复
  • 部分函数的查找(比如虚表),需要用到几个工具,见链接,使用方法见后面说明

🛠️工具

🧵工具的使用方法

  • 比如虚表的定位
  • 需要下载好上面的工具(都放入到同一个文件夹内)
  • 还需下载好BDS最新版,和Win10/11 MCBE
  • 第一步使用 "MCBDS插件开发助手.exe"
    1. 打开软件,点击右上角"选择文件",选择BDS下的 pdb文件
    2. 点击"导出信息文件"
    3. 将导出的文件先保存下来. 假设保存的路径为(C:\A\bedrock_server的PDB符号.txt)
  • 第二步 运行准备好的目标版本的BDS
    • 将BDS解压后 运行exe,暂时不管它。假设BDS所在目录是:C:\1.21.1.03
  • 第三步使用 "MCWin10VptrFromBDS"
    1. 首先打开软件
    2. 按提示输入 3 (选择SymDB数据库位置),软件后面会根据bedrock_server的PDB符号.txt生成一个LevelDB数据库,这一步是设置数据库的存储位置
    3. 请在一个合适的目录创建一个空文件夹,比如C:\SymDB-1.21.1.03
    4. 在软件里输入这个路径,注意最后不要反斜杠结尾,回车
    5. 然后输入 2 ,再输入 MCBDS插件开发助手生成的文件的路径 如C:\A\bedrock_server的PDB符号.txt,回车
    6. 软件会自动处理符号表,并存储在输入的LevelDB数据库路径里。
    7. 输入12,这一步软件将会生成 虚表位置表,所以,还需要一个用于保存的空目录,如:C:\Save-1.21.1.03 输入并回车,注意结尾没有反斜杠
    8. 如果此期间软件没有关闭的话,他会提示你再次回车即可,否则需要输入 C:\A\bedrock_server的PDB符号.txt 这个文件位置
    9. 等待处理完成即可。可以关闭刚才所有打开的软件了。
  • 然后关于生成的文件
    • 对于生成的所有文件和一个文件夹
    • 像 ActorSymVtr.txt 这样的文件就是表示 Actor的虚表,打开后能看到
    • /* VTNum 0 bedrock_server.exe+019B16C0 */
    • public: virtual bool __cdecl Actor::getStatusFlag(enum ActorFlags)const __ptr64
    • VTNum 0 就是表示第0号虚表 虚表函数是 bool Actor::getStatusFlag(enum ActorFlags)
    • 以此类推
    • 像有的虚表号 出现提示 [同函数多名] 并伴有很多函数,这是因为此类函数结构比较简单,比如只有return true,编译器将相同内容的函数都合并到了同一处,
    • 比如 A函数 和 B函数的内容一样指针都是123,那么我们通过指针来推测函数名的时候会得到 A函数和B函数,由于软件无法分清哪个才是Actor的虚函数,所以附上部分
    • 剩下的由于数量太多,所以都统一放到一个文件里面了,在同目录下的文件夹(unknowVTF)以地址命名