首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

手游热更新方案--Unity3D下的CsToLua技术

Mono.Cecil ========== Mono.Cecil:一个可加载并浏览现有程序集并进行动态修改并保存的.NET框架。...麻将项目入口: [2.png] 举一个Mono.Cecil例子,这是原始的Unity C#代码: [3.png] 我们采用Cecil工具对生成的Dll进行代码嵌入,具体的嵌入逻辑如下: [4.png]...(这也是一些外挂的套路,也有加壳和加密技术来提升反编译的难度了,此处省去一万字)上面的代码等价于如下: [6.png] Mono.Cecil底层是如何处理的呢,再举一个例子,这是原始的C#代码: [7....png] 上面是C#逻辑打包成dll后,采用Cecil反编译得到的内容如下,具体逻辑见注释: [8.png] 用Mono.Cecil得到了二进制文件的中间代码,中间代码是一种基于操作栈的虚拟机语言,指令间借助栈传递数据...然后对MethodBody中的IL Instructions(指令代码)做数据流分析和控制流分析。

2.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

dotnet 6 使用 Obfuscar 进行代码混淆

因为使用 dotnet tool 可以非常方便接入自己已有的 CI CD 上,而且也可以实现非常方便的更新逻辑 按照约定,使用 dotnet tool 的第一步是进行安装,安装的方法就是在命令行输入以下代码...-- 由于进行二次编码,将会稍微伤一点点性能,二次编码需要在运行的时候,调用 Encoding 进行转换为字符串 --> <Var name="HideStrings" value="false"...的知识,在 IL 里面,是允许不同的字段重名的,只要字段的类型不相同即可。...github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init...\6.0.1\ 路径,这是因为代码是之前写的,博客是鸽子很久才写的,还请大家自行更新 混淆原理 此混淆工具底层使用 Mono.Cecil 进行程序集的读取和编织,使用 Mono.Cecil 可以读取出程序集的信息

1.7K10

.NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖

前者不可定制、运行缓慢、消耗资源(不过好消息是现在开源了);后者已被弃用、不受支持且基于旧版本的 Mono.Cecil。...这可以避免要求团队所有成员安装工具或者将工具内置到项目的源代码管理中。...现在在编译的时候使用命令 msbuild /t:ILRepack 就可以完成程序集的合并了。 注意,你普通编译的话是不会进行 IL 合并的。...如果希望使用 ILRepack 的其他命令,可以考虑使用帮助命令: 1 ilrepack /help 或者直接访问 ILRepack 的 GitHub 仓库来查看用法: gluck/il-repack...以下是 GitHub 社区中的讨论: Mono.Cecil 0.10 support · Issue #182 · gluck/il-repack Migrate to vanilla 0.10 cecil

71050

PyQt5如何将.ui文件转换为.py文件的实例代码

PyQt5之如何将.ui文件转换为.py文件 一、通过Eric6把.ui文件转换为.py文件 1、首先打开Eric6编辑器,切换到“窗体”选项卡,然后选中需要转换的.ui文件,单击鼠标右键,选择“编辑窗体...二、通过命令行把.ui文件转换为.py文件 1、通过PyQt5提供的命令行工具pyuic5可以轻松实现,打开cmd,将路径切换到你保存.ui文件的路径位置,输入以下命令:文件名为你需要转换的.ui文件的名字...2、如果输入pyuic5命令没有得到正确提示,而是提示如下: ‘pyuic5’ 不是内部或外部命令,也不是可运行的程序或批处理文件。...highlight==signal#pyuic5 三、通过Python脚本把.ui文件转换为.py文件 1、这个脚本本质上是用Python代码把上述操作封装起来,如下: import os import...总结 到此这篇关于PyQt5之如何将.ui文件转换为.py文件的文章就介绍到这了,更多相关PyQt5之如何将.ui文件转换为.py文件内容请搜索ZaLou.Cn

5K20

IL编织器 --- Fody

它允许在构建过程中作为一部分来操纵程序集的中间语言(IL),这需要大量的底层代码编写。这些底层代码需要了解 MSBuild 和 Visual Studio 的 API。...将程序集和 pdb 文件读入 Mono.Cecil 对象模型中。 根据需要重新应用强名称。 保存程序集和 pdb 文件。...「Fody」 使用 Mono.Cecil 和基于插件的方法在编译时修改 .NET 程序集的中间语言(IL)。 它不需要额外的安装步骤来构建。 属性是可选的,具体取决于所使用的编织器。...https://github.com/Fody/PropertyChanged 「InlineIL.Fody」 在编译时注入任意IL代码。...代码,在按照 IL 代码取编写要注入的 C# 代码,也可以参照我之前的文章工具 --- IL指令集解释,理解 IL 执行过程。

42210

LLM2Vec介绍和将Llama 3换为嵌入模型代码示例

这种结构适合于文本生成任务,如文本续写、自动编写程序代码等。...其实我们可以将这篇论文的重点简单的理解为,如何将一个decoder-only的模型快速并且无损的转换成一个encoder-only模型。...方法详解 论文中描述的LLM2Vec方法在代码层面主要涉及以下几个关键的修改,以将decoder-only模型转换为能够生成丰富文本编码的模型: 启用双向注意力:通常,decoder-only模型使用的是单向...这些代码修改主要集中在模型的预训练和微调阶段,旨在不仅使模型能够处理更丰富的上下文信息,还提高了模型在不同NLP任务中的通用性和有效性,也就是说我们最终还是需要进行微调训练的,所以下面我们就要展示一些代码来看看如何进行这部分的微调训练...利用LLM2Vec将Llama 3化为文本嵌入模型 首先我们安装依赖 pip install llm2vec pip install flash-attn --no-build-isolation

12010

在.NET Core 中收集数据的几种方式

手动埋点 手动埋点比较简单,我们需要在一些操作前后可以手动包裹我们的埋点代码,比如 Http,RPC,DB, MQ 等调用,非常灵活,可以在任意的地方添加我们的埋点信息,然后汇总数据,按批发送,缺点是对程序的侵入性较高...这个库我还没怎么用过,生而为人,我很抱歉 〒▽〒 Mono.Cecil Mono.Cecil:一个可加载并浏览现有程序集并进行动态修改并保存的.NET框架, Mono Cecil十分强大,可以静态注入程序集...(注入后生成新的dll程序集)和动态注入程序集(注入后不改变目标程序集,只在运行时改变程序集行为,腾讯开源的Unity热更解决方案xLua有一个非常吸引人的特性就是Hotfix,其原理是使用Mono.Cecil...库对进行C#层编译出来的dll程序集进行IL代码注入。...•实时 (JIT) 编译和代码间距调整事件。•类加载和卸载事件。•线程创建和析构事件。•函数入口和退出事件。•异常。•托管和非托管代码执行之间的转换。•不同运行时上下文之间的转换。

99120

在.NET Core 中收集数据的几种方式

手动埋点 手动埋点比较简单,我们需要在一些操作前后可以手动包裹我们的埋点代码,比如 Http,RPC,DB, MQ 等调用,非常灵活,可以在任意的地方添加我们的埋点信息,然后汇总数据,按批发送,缺点是对程序的侵入性较高...这个库我还没怎么用过,生而为人,我很抱歉 〒▽〒 Mono.Cecil Mono.Cecil:一个可加载并浏览现有程序集并进行动态修改并保存的.NET框架, Mono Cecil十分强大,可以静态注入程序集...(注入后生成新的dll程序集)和动态注入程序集(注入后不改变目标程序集,只在运行时改变程序集行为,腾讯开源的Unity热更解决方案xLua有一个非常吸引人的特性就是Hotfix,其原理是使用Mono.Cecil...库对进行C#层编译出来的dll程序集进行IL代码注入。...实时 (JIT) 编译和代码间距调整事件。 类加载和卸载事件。 线程创建和析构事件。 函数入口和退出事件。 异常。 托管和非托管代码执行之间的转换。 不同运行时上下文之间的转换。

88000

dotnet 将C#编译为wasm让前端html使用

,大概就是从 Hello 拿到输入,然后修改输入然后输出 接下来就是重点了,如何将 C# 代码编译为 WebAssmebly 了 这里的 C# 需要通过 mono 的辅助用于将 IL换为 WebAssembly...当然这些步骤都是最基础的步骤,也有封装好的命令,也就是 dotnet wasm xx.csproj 完成编译,不过这一步需要先安装工具(注意这个工具还没正式发布) 通过 csc 命令将 C# 代码编译为...IL 文件。...mono 运行时所在的文件夹 上面的代码通过引用 mono 运行时的库,将 Program.cs 文件编译为 Example.dll 文件 当然这里的 Example.dll 文件现在还是 IL 文件...上面这句话已经过时,只是我逗比看文档理解不对,其实上面这一步编译的 IL 文件已经可以在 wasm 执行了。

2.3K10

dotnet 警惕 C# 的 is var 写法

第一个 var 和 IFoo 是等价的 然而第二个 var 在上面代码里面,却不能够平替为 IFoo 类型,试试看替换为 IFoo 类型试试,如以下代码,大家可以看到运行逻辑是完全不相同的 var f1...对应代码 C#: if (foo is IFoo f3) IL: IL_0007: ldloc.0 // foo IL_0038: isinst IFoo...IL_003d: stloc.1 // f3 IL_003e: ldloc.1 // f3 IL_003f: brfalse.s IL_006a 本文以上代码放在...github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init...请在命令行继续输入以下代码 git remote remove origin git remote add origin https://github.com/lindexi/lindexi_gd.git

9910

在.NET中警惕C#的is var写法

第一个 var 和 IFoo 是等价的 然而第二个 var 在上面代码里面,却不能够平替为 IFoo 类型,试试看替换为 IFoo 类型试试,如以下代码,大家可以看到运行逻辑是完全不相同的 var f1...对应代码 C#: if (foo is IFoo f3) IL: IL_0007: ldloc.0 // foo IL_0038: isinst IFoo...IL_003d: stloc.1 // f3 IL_003e: ldloc.1 // f3 IL_003f: brfalse.s IL_006a 本文以上代码放在...github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init...请在命令行继续输入以下代码 git remote remove origin git remote add origin https://github.com/lindexi/lindexi_gd.git

9810

BypassUAC

无文件四种攻击形式: 恶意文档 比如:在word中加入恶意的宏代码实现命令执行,又或者邮件中。...通过修改IL文件,也可以导出dll函数。 首先去除[DllExport]后将dll代码编译,编译后的dll文件是看不到Export Directory的。 ?...然后ildasm把dll文件反编译成il文件,命令如下: ildasm BypassUAC_Dll_csharp.dll /out=BypassUAC_Dll_csharp.il 打开生成的BypassUAC_Dll_csharp.il...保存后,需要使用ilasm再把il编译成dll文件,这里遇到一个坑,如果按照如下命令进行编译: ilasm BypassUAC_Dll_csharp.il /dll /out=BypassUAC_Dll_csharp_exp.dll...问题的根源就是这里,利用IL之前的dll是64位的,之后变成了32位的,解决方法很简单,使用ilasm的时候添加一个/X64参数就可以了: ilasm BypassUAC_Dll_csharp.il

2.1K30

C# IL DASM 使用

IL是微软平台上的一门中间语言,我们常写的C#代码在编译器中都会自动转换成IL,然后在由即时编译器(JIT Compiler)转化机器码,最后被CPU执行。...命令:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\ildasm.exe (window 7 64位 操作系统安装目录) 。 ?...这时可以看到Main方法在IL中编译的代码。感觉有点陌生不易看懂。 还有IL编译出现的三角型,正方型都是啥! IL DASM 基础 1.图标含义 ? 使用IL反编译出项目代码 ?...::.ctor() IL_0006: ret } // end of method Program::.ctor 1)cil managed:表示其中为IL代码,指示编译器编译为托管代码; 2)....当我们不需要把值存入变量时使用; 使用IL DASM 修改EXE程序代码 1.打开IL工具,选择所要修改的EXE程序。 ? 2.文件-->储。

93431

IL DASM反编译工具使用c# https:www.cnblogs.comcaokai520p4921706.html

IL是微软平台上的一门中间语言,我们常写的C#代码在编译器中都会自动转换成IL,然后在由即时编译器(JIT Compiler)转化机器码,最后被CPU执行。...(2)命令:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\bin\ildasm.exe (window 7 64位 操作系统安装目录) 。...这时可以看到Main方法在IL中编译的代码。感觉有点陌生不易看懂。 还有IL编译出现的三角型,正方型都是啥! IL DASM 基础 1.图标含义 ? 使用IL反编译出项目代码 ?...::.ctor() IL_0006: ret } // end of method Program::.ctor 1)cil managed:表示其中为IL代码,指示编译器编译为托管代码; 2)....当我们不需要把值存入变量时使用; 使用IL DASM 修改EXE程序代码 1.打开IL工具,选择所要修改的EXE程序。 ? 2.文件-->储。

1.1K31

【小白学C#】浅谈.NET中的IL代码

点击打开它,然后在命令行里面输入ILDasm并回车,就会打开ILDasm工具了。 ? ?...图2:VS开发人员命令提示示意图    2.然后,在ILDasm工具的界面,点击文件-->打开,然后选择我们预先编译出来的.exe文件,ILDasm工具就会自动的帮我们分析出IL代码及其代码组织结构,如下图所示...图4:ILDasm中图标含义    通过上面的两步,我们就可以轻松的反编译出程序的IL代码,下面我们通过一个小案例,来解读一下IL代码的运行流程以及分析IL代码的方式。...,之后再按照第三节的操作,将其反编译成IL代码,以下是反编译出来的IL代码结构: ?...图5:反编译IL代码结构 首先让我们观察一下Func1反编译出来的IL代码,如下图所示: ?

2.7K20

dotnet C# 多次对一个对象调用构造函数会发生什么

public Foo() { F2 = 10; } 通过 IL 代码可以看到实际的逻辑如下 .method public...IL_0010: ret } // end of method Foo::.ctor 在 C# 中,其实构造函数也是一个函数而已,如上面代码,只有写给 F2 赋值的逻辑,而没有给 F1 赋值的逻辑...也因为构造函数只是一个函数,因此调用多次就和调用一个方法多次是一样的 本文所有代码放在github 和 gitee 欢迎访问 可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd...命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码 git init git remote add origin https://gitee.com/lindexi/lindexi_gd.git...git pull origin 5eb2ea112f2861791fafda9ed326657fd05572dd 以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源

72910
领券