GG修改器破解版下载地址:https://ghb2023zs.bj.bcebos.com/gg/xgq/ggxgq?GGXGQ
大家好,今天小编为大家分享关于gg修改器内存加速游戏代码_gg修改器加快游戏速度的内容,赶快来一起来看看吧。
InferSharp 将Infer的可扩展、自动化和过程间内存安全分析引入 .NET 平台。这项工作有两个关键的知识组成部分,在下图中以绿色突出显示。
当今市场上可用的 .NET内存安全分析中的大部分工作是过程内的(分析仅限于单个方法的上下文)或依赖于开发人员注释。例如,PreFast检测到一些空解引用异常和内存泄漏的实例,但它的分析纯粹是过程内的。同时,JetBrains Resharper严重依赖开发人员注释进行内存安全验证。
相比之下,像Infer这样的过程间分析器会考虑不同方法的上下文,从而可以检测到更微妙的问题。此外,它是自动化的(它不依赖于开发人员注释),并通过分析增量更改在大型生产代码库上有效扩展。它使用分离逻辑(一种用于推理计算机内存操作的程序逻辑)来证明某些内存安全条件。为此,它利用了Smallfoot谓词框架,该框架以 Smallfoot 中间语言 ( SIL ) 表示。
使 Infer 能够分析 .NET 源代码的核心问题是将其转换为 SIL,即 Infer 分析的语言。为此,源语言结构需要在 OCaml 中表示。InferSharp 通过引入与语言无关的中间层简化了这项任务,该层缓解了其他翻译方法中存在的与语言相关的挑战。
在 C 语言翻译管道中,抽象语法树 (AST) 被导出为 JSON 格式,通过 atdgen 库从中提取类型定义并在 OCaml 中进行翻译。在 Java 管道中,称为 Javalib 的 OCaml 库用于提取 Java 字节码类型定义。然后将这些类型定义翻译成 OCaml。这种方法存在以下主要缺点:
由于这些原因,我们引入了 SIL 的与语言无关的 JSON 序列化,以及一个反序列化包,该包在 OCaml 中提取 SIL 数据结构。然后,Infer 的后端分析直接使用输出。
从源代码的低级表示开始工作的优点有两个:首先,CIL 是所有 .NET 语言的基础(例如除了最常见的 C# 之外的 Visual Basic 和 F#),因此 InferSharp 支持所有 .NET 语言通过这种方式,其次,CIL 去除了任何语法糖,从而减少了翻译所需的语言内容,从而简化了翻译。
此表示的主要组件是类型环境和控制流图 (CFG)。有关说明这些组件的示例,请参阅示例翻译。
我们现在更详细地讨论管道的实现。.NET 二进制文件首先使用Mono.Cecil库反编译成 CIL ,然后我们从中检索可用的类型定义和方法指令。类型定义信息包括:
为软件项目中出现的所有类型以及这些类型继承的所有类检索此信息。每种类型都作为一个条目存储在 JSON 文件中,我们称之为类型环境。
第二个组件是控制流图。对于软件项目中的每个过程,管道生成一个过程描述,该描述由方法信息(全名、参数、返回类型和局部变量)以及节点列表(包含后继/前驱边)组成信息)组成程序。这些节点由翻译管道产生。它遍历每条指令并将其解析为相应的 SIL 指令。这些翻译后的指令被添加到 CFG 节点,而 CFG 节点又被添加到 CFG 节点列表中。生成的过程描述由节点 ID 列表和过程元数据组成,然后作为条目存储在 CFG JSON 中。
换句话说,控制流图由三个概念组件组成:
在本节中,我们将展示一个翻译管道如何运作的示例。在此示例中,我们考虑如下所示的源代码:
public void InitializeInstanceObjectField(bool initializeToNull)
=> InstanceObjectField = initializeToNull ? null : new TestClass();
它对应的字节码是:
.method public hidebysig instance void
InitializeInstanceObjectField(bool initializeToNull) cil managed
{
// Code size 18 (0x12)
.maxstack 8
IL_0000: ldarg.0
IL_0001: ldarg.1
IL_0002: brtrue.s IL_000b
IL_0004: newobj instance void Cilsil.Test.Assets.TestClass::.ctor()
IL_0009: br.s IL_000c
IL_000b: ldnull
IL_000c: stfld class Cilsil.Test.Assets.TestClass Cilsil.Test.Assets.TestClass::InstanceObjectField
IL_0011: ret
} // end of method TestClass::InitializeInstanceObjectField
管道生成的部分类型环境 JSON 如下所示。它描述了 TestClass 类,其中包括对其实例和静态字段的描述。在这种情况下,字段也是对象;这表明它们被标识为结构化数据类型(“Tstruct”)的指针类型(“Tptr”)。
{
"type_name": {
"csu_kind": "Class",
"name": "Cilsil.Test.Assets.TestClass",
"type_name_kind": "CsuTypeName"
},
"type_struct": {
"instance_fields": [
{
"field_name": "Cilsil.Test.Assets.TestClass.InstanceObjectField",
"type": {
"kind": "Pk_pointer",
"type": {
"struct_name": "Cilsil.Test.Assets.TestClass",
"type_kind": "Tstruct"
},
"type_kind": "Tptr"
},
"annotation": {
"annotations": []
}
},
{
"field_name": "Cilsil.Test.Assets.TestClass.InstanceArrayField",
"type": {
"kind": "Pk_pointer",
"type": {
"content_type": {
"kind": "Pk_pointer",
"type": {
"struct_name": "Cilsil.Test.Assets.TestClass",
"type_kind": "Tstruct"
},
"type_kind": "Tptr"
},
"type_kind": "Tarray"
},
"type_kind": "Tptr"
},
"annotation": {
"annotations": []
}
}
],
"static_fields": [
{
"field_name": "Cilsil.Test.Assets.TestClass.StaticObjectField",
"type": {
"kind": "Pk_pointer",
"type": {
"struct_name": "Cilsil.Test.Assets.TestClass",
"type_kind": "Tstruct"
},
"type_kind": "Tptr"
},
"annotation": {
"annotations": []
}
},
字节码到 CFG 的转换操作如下:
我们生产的 CFG 如下图所示。在任何给定的 CFG 中,节点与整数标识符、前驱节点标识符列表(“preds”)、后继节点标识符列表(“succs”)和异常节点标识符列表(“exn”)相关联.
n$0 表示TestClass 指针“this”的值,n$1 表示布尔变量initializeToNull 的值。与 C 的语法类似,表达式 *n$0.Cilsil.Test.Assets.TestClass.InstanceObjectField 表示 null 存储在 n$0 的 InstanceObjectField 中。
PRUNE 节点根据 n$1 的真值指示控制流。
node16586的指令与对象分配相关;首先,大小为 TestClass 的内存被分配并由 n$2 标识。然后,在分配的内存上调用 TestClass 的构造函数。最后,这个新分配的对象的指针被赋值为 n$0 的 InstanceObjectField 的值。
node16583 preds: 16580 succs: 16584 16585 exn: 16582 MethodBody
n$0=*&this:Cilsil.Test.Assets.TestClass* [Line 41];
n$1=*&initializeToNull:bool [Line 41];
node16584 preds: 16583 succs: 16581 exn: 16582 MethodBody
PRUNE (n$1, True) [Line 41];
*n$0.Cilsil.Test.Assets.TestClass.InstanceObjectField:Cilsil.Test.Assets.TestClass:Cilsil.Test.Assets.TestClass=null [Line 41];
node16585 preds: 16583 succs: 16586 exn: 16582 MethodBody
PRUNE (!(n$1):, False) [Line 41];
node16586 preds: 16585 succs: 16581 exn: 16582 Call
n$2:Cilsil.Test.Assets.TestClass*=_fun static BuiltIn.__new() (sizeof(Cilsil.Test.Assets.TestClass, exact):Cilsil.Test.Assets.TestClass*) [Line 41];
n$3:void=_fun System.Void Cilsil.Test.Assets.TestClass..ctor() (n$2:Cilsil.Test.Assets.TestClass*) [Line 41];
*n$0.Cilsil.Test.Assets.TestClass.InstanceObjectField:Cilsil.Test.Assets.TestClass:Cilsil.Test.Assets.TestClass=n$2 [Line 41];
然后通过 Infer 分析 CFG 以生成错误报告。例如,在以下引用上述方法的代码中:
public void TestMethod()
{
TestClass Tc;
Tc = new TestClass();
Tc.InitializeInstanceObjectField(true);
_ = Tc.InstanceObjectField.GetHashCode();
}
Infer 最终在程序间检测到它Tc.InstanceObjectField为 null,其取消引用构成错误:
Assets/TestCode.cs:14: error: NULL_DEREFERENCE (biabduction/Rearrange.ml:1622:55-62:)
[B5] pointer `%0->Cilsil.Test.Assets.TestClass.InstanceObjectField` could be null and is dereferenced at line 14, column 1.
12. Tc = new TestClass();
13. Tc.InitializeInstanceObjectField(true);
14. > _ = Tc.InstanceObjectField.GetHashCode();
以上就是关于gg修改器内存加速游戏代码_gg修改器加快游戏速度的全部内容,希望对大家有帮助。
gg修改器3d最新,GG修改器3D最新:改变游戏体验的必备利器 大小:5.88MB4,529人安装 GG修改器3D最新是目前市面上最强大的游戏修改软件之一。它能够在游戏中实现众多强大……
下载gg修改器最新版8.45,gg修改器最新版8.45让游戏更有趣、更公平的必备工具 大小:6.66MB4,549人安装 随着网络游戏的普及和发展,很多玩家都开始注重游戏的体验和竞技公平性,而 gg修改……
下载gg修改器最新版本中文,GG修改器:游戏优化的神器 大小:5.41MB4,964人安装 现在的游戏越来越精美,游戏画面质量越来越高,游戏的要求也越来越高。而面对这些要……
下载gg修改器免root如何选择_免root使用GG修改器 大小:3.99MB6,078人安装 大家好,今天小编为大家分享关于gg修改器免root如何选择_免root使用GG修改器的内容……
下载gg游戏修改器源,赞美gg游戏修改器源 大小:4.37MB4,868人安装 现代人对于游戏已经不单单是一种娱乐方式,更是一种生活方式。游戏开发者们不断推出……
下载gg修改器中文101版本_gg修改器101.4 大小:7.67MB5,939人安装 大家好,今天小编为大家分享关于gg修改器中文101版本_gg修改器101.4的内容,赶快来……
下载gg游戏修改器和平精英脚本,最强gg游戏修改器,让你成为绝地求生之王 大小:18.02MB4,691人安装 在数以亿计的游戏中,绝地求生是一个赢得了亿万玩家心的游戏。然而,想要在游戏中成……
下载魔界宿命者gg助手下载,魔界宿命者手游下载 大小:1.18MB5,257人安装 世界上最远的距离,不是爱,不是恨,而是熟悉的人,渐渐变得陌生。 大家好,今天小……
下载gg修改器下载中文怎么用,GG修改器:玩游戏的好帮手 大小:9.02MB5,045人安装 GG修改器是一款功能强大的游戏辅助工具,可以为玩家提供各种各样的辅助功能,例如无……
下载gg修改器96.1中文汉化,强大的GG修改器96.文汉化 大小:7.86MB4,760人安装 如果你是一位游戏玩家,你一定会发现在很多网络游戏中,有些东西是需要付费才能使用……
下载