大家好,今天小编为大家分享关于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修改器优化中文版_gg修改器简化版 大小:17.94MB2,078人安装 大家好,今天小编为大家分享关于gg修改器优化中文版_gg修改器简化版的内容,赶快来……
下载gg修改器下载中文游戏版_gg修改器官网下载游戏 大小:8.90MB2,100人安装 大家好,今天小编为大家分享关于gg修改器下载中文游戏版_gg修改器官网下载游戏的内……
下载gg免修改器root版怎么用,GG免修改器root版打游戏就是这么任性! 大小:14.74MB675人安装 随着智能手机的普及,手游成为了很多人的生活娱乐方式。但是很多游戏需要修改才能更……
下载GG修改器官方最新版下载,gg修改器官方网站下载 大小:9.32MB2,232人安装 gg修改器官方正版2022(gameguardian)是专为喜欢玩手游的玩家们打造的多功能修改器工……
下载gg游戏修改器被游戏检测到,GG游戏修改器,为游戏玩家提供不一样的游戏乐趣 大小:14.11MB736人安装 玩家们在游戏中常常会因为种种原因感到无趣或没有趣味性,而GG游戏修改器可以充当一……
下载gg修改器优化中文版,令人惊艳的gg修改器优化中文版 大小:12.65MB1,011人安装 随着电竞游戏的不断发展,越来越多的玩家加入了这场激烈竞技的战场。在这场战斗中,……
下载辅助gg修改器免root射软件_免root使用gg修改器 大小:4.01MB2,115人安装 大家好,今天小编为大家分享关于辅助gg修改器免root射软件_免root使用gg修改器的内……
下载GG修改器如何下载最新版本,下载最新版本的GG修改器 大小:13.55MB937人安装 GG修改器是众所周知的游戏修改工具之一,它可以让玩家轻松地修改游戏内的一些属性和……
下载gg修改器免root版w,gg修改器免root版w是手机游戏修改的首选工具 大小:6.85MB787人安装 无论是经典的《王者荣耀》还是热门的《PUBG》,都有很多玩家使用修改器来获得更好的……
下载gg修改器不root可以吗,GG修改器不root也能玩转游戏?太棒了! 大小:9.52MB974人安装 作为一名热爱玩游戏的玩家,我深深的理解到了游戏过程中各种各样的问题,例如游戏内……
下载