Closed mingkuang-Chuyu closed 4 months ago
1.官方YY-Thunks非我所持有,所以如果微软vc源码发生了更新,引入了新的需要自己实现的向下兼容的Windows API的话,官方YY-Thunks的nuget中没有这个API的话,我就无法及时兼容最新的vc源码编译了,所以我需要以自己fork的YY-Thunks源码做及时跟进。 2.Release版如果没在启动时就加载需要的dll,在用的时候再动态加载dll的话会可能造成死锁的问题,目前在本项目中不会出现,因为目前本项目需要引用到的YY-Thunks中的函数只有ntdll和kernel32中的,这两个模块已经通过MSVCR14X(D).dll预加载了。 所以综上,只能通过这种方式灵活使用,且目前不会出现问题。
1. 背景
目前,对YY-Thunks才用了源码依赖。其中one_key_build中进行了YY-Thunks源代码下载。
https://github.com/sonyps5201314/msvcr14x/blob/master/one_key_build.bat#L37
而编译工作则在vcxproj中对YY-Thunks.cpp完成编译。
2. 为什么我们需要更改?
2.1. 目前来说发现一些问题
首先,目标编译YY-Thunks的方法是有问题的。
对YY-Thunks.cpp没有进行关闭应用消除,如果打开则将导致YY-Thunks初始化工作无法正常进行(这样常见于Release版,Debug版默认是关闭的)
weak符号没有处理
__acrt_atexit_table
被强制定义,以解决链接问题,这是不科学的……2.2. 存在兼容性风险
现在虽然完成了YY-Thunks的编译,但是这依赖于与YY-Thunks的内部行为,一旦YY-Thunks发生更改。那么就会出现兼容性问题(一般会表现为编译或者链接失败,从而额外增加适配成本)
3. 修改点
YY-Thunks.cpp
编译项__acrt_atexit_table