对MC基岩版的一次开发
这2天在搞mc服务器。在C++基础终于不是太差的情况下,终于可以写一些像样的东西了。然后就写了一个MC Server的小插件。 https://www.minebbs.com/resources/vampire-1-14-60.1152/
大概过程就是:
先提出idea,然后想到这个idea会涉及到的各种类和方法,然后通过ida进行合理推断,猜测出相应的类、成员、返回值等等。
然后用windows的THook来将自己内容注入进它的服务端。然后进行创新。
因为服务器本身有一个bug(走在路上有时候Actor::brightness成员变量会无缘无故变成最大,虽然只有0.2s的持续时间,但是也严重影响了。)然后我就想办法去规避它,结果没想到,Linux服务端里还存在的方法,在Windows服务端里被优化掉了orz。窒息啊!
继续寻找其他方法规避,结果找了一天,又找到一条,结果那条又被优化掉了。
一天后的感想——是谁引用了我,而我又引用了谁?
一天过去,感觉此路不通,得换条路。我想到了通过底层内存直接进行,因为我记得当时学类的私有成员时有过一个:在外部用指针指向类,并通过指针偏移访问成员是一个很危险的行为,因为它有可能访问到类的私有成员。ida中off=的值应该是它的偏移量,那么我就建了个空的我所需求的BlockSource类。
但是我建立指针的时候,必须提前给它分配相应大小的内存,但我不知道大小。有个想法,找到一个返回BlockSource对象的方法,然后调用,将返回值用memcpy进行暴力判断。但是问题就在于我找不到返回BlockSource的方法,所以此方案PASS。
听大佬的建议:去看看operation=或者引用它的其他函数,有没有new,new的时候有没有写大小。我没有找到enmm。
先暂时放弃修bug,继续学习C++。