sonyps5201314 / msvcr14x

msvcr14x is a program that allows programs compiled with VC2015 and above not to rely on a bunch of useless API-Ms-win-starting DLLS
Apache License 2.0
54 stars 14 forks source link

优化需求:对YY-Thunks调整为nuget引用 #6

Closed mingkuang-Chuyu closed 4 months ago

mingkuang-Chuyu commented 1 year ago

1. 背景

目前,对YY-Thunks才用了源码依赖。其中one_key_build中进行了YY-Thunks源代码下载。

https://github.com/sonyps5201314/msvcr14x/blob/master/one_key_build.bat#L37

:check_YY-Thunks
if not exist ../YY-Thunks (
  git clone https://github.com/sonyps5201314/YY-Thunks.git ../YY-Thunks
  goto :check_YY-Thunks
)
git -C ../YY-Thunks pull -v --progress "origin"

而编译工作则在vcxproj中对YY-Thunks.cpp完成编译。

2. 为什么我们需要更改?

  1. 主要目标是解决潜在风险,现在Release下 YY-Thunks并不能完全初始化工作。
  2. 减少人力成本,采用官方的接入方案,减少YY-Thunks改动导致项目需要重新适配的工作。

2.1. 目前来说发现一些问题

首先,目标编译YY-Thunks的方法是有问题的。

2.2. 存在兼容性风险

现在虽然完成了YY-Thunks的编译,但是这依赖于与YY-Thunks的内部行为,一旦YY-Thunks发生更改。那么就会出现兼容性问题(一般会表现为编译或者链接失败,从而额外增加适配成本)

3. 修改点

sonyps5201314 commented 1 year 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预加载了。 所以综上,只能通过这种方式灵活使用,且目前不会出现问题。