修改.Net源码的方法再记录和安全签名限制

2025-10-30 13:53:49
标签: svg sharpvectors ildasm ilspy hittest

Git Hub上的ElinamLLC/SharpVectors/tree/master

是一个.Net上显示Svg文件的神库,想借用一下,于是,尝试了一下项目生成的依赖关系图。

发现选中有问题。

选择绿框中的图形不工作


SharpVectors-master\Source\SharpVectorRenderingWpf\Wpf\WpfDrawingDocument.cs

if (TryCast.Cast(geometry, out path))

{

    if (path.FillContains(pt, 1, ToleranceType.Absolute))

    {

        return true;

    }

}

上面return true需要改成return false

这里的问题是,弧线的bounding box包括了里面的椭圆,造成选不中里面的。改成false后,要求完全hit线的时候才可以选中。

在VDI中,我用的是下载的package包,有签名,尝试了用ildasm弄出il,再重新编译回去的方法不工作,会报签名错误。

签名错误

 

而通过直接修改17成16的方法,则没有这个问题。

在ildasm中,选中显示字节能看出来二进制字节码,直接在文件中查找(VS就行,改后缀为lib,能二进制打开)

IL_003a:   call       bool [SharpVectors.Core]SharpVectors.TryCast::Cast(!!0,

                                                                                                                                                                                                                         !!1&)

IL_003f:   brfalse.s  IL_0057

IL_0041:   ldloc.s    V_6

IL_0043:   ldarg.2

IL_0044:   ldc.r8     1.

IL_004d:   ldc.i4.0

IL_004e:   callvirt   instance bool [PresentationCore]System.Windows.Media.Geometry::FillContains(valuetype [WindowsBase]System.Windows.Point,

                                                                                                                                float64,

                                                                                                                                valuetype [PresentationCore]System.Windows.Media.ToleranceType)

IL_0053:   brfalse.s  IL_00bb

IL_0055:   ldc.i4.1

IL_0056:   ret

直接查找 28 0A 00 00 2B 2C 16 11 06 04 23 00 00 00 00 00 00 F0 3F 16 6F ED 00 00 0A 2C 66 17 2A

修改二进制码

 

把17改成16就相当于return false

再次尝试运行,就可以了,安全签名的检查也不报错了。

新的选中效果
放进自己源码后

 


阅读(0) 收藏(0) 转载(0) 举报/Report
相关阅读

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有