`ldstr`指令使用哪种常量?

时间:2018-04-14 16:07:29

标签: .net cil ildasm ilasm

我正在阅读 .NET IL Assembler 一书。引用了这本书:

  

<?php set_include_path('C:\\xampp\htdocs\website\db_connection'); ?> <?php include('C:\\xampp\htdocs\website\db_connection\\dbconnection.php'); ?> </head> <body> <?php if(isset($_POST['save'])){ $sql = "INSERT INTO website (id, filelocation) VALUES ('".$_POST["id"]."','".$_POST["filelocation"]."')"; $result = mysqli_query($conn,$sql); } ?> 是一个创建字符串对象的指令   从指定的字符串常量并加载对此的引用   对象到堆栈上。 此情况下的字符串常量存储在   元数据。您可以将此类字符串称为公共语言运行库   字符串常量元数据字符串常量。你可以存储和   以另一种方式处理字符串常量,如下所述   片刻,`ldstr` "Enter a number"专门处理公共语言运行时   字符串常量,始终以Unicode(UTF-16)格式存储。

我看到作者写道,可以将ldstr引用为公共语言运行时字符串常量元数据字符串常量。虽然我不明白这些选项之间的区别,但我的问题是关于其他的......

另外,作者写了两次关于string指令使用字符串的内容,每次都是其他指令(我用粗体字选择它)。

团队使用哪种类型的常量?它是公共语言运行时字符串常量吗?或者它是元数据字符串常量吗?

1 个答案:

答案 0 :(得分:0)

我在过去几天对此进行了一些研究,并得出了一个可能的答案。

本书 .NET 2.0 IL Assembler 似乎使用与您的书相同的示例。 他们谈论这个指令

  

ldstr“输入数字”

将常量“输入数字”加载到元数据中。 与您的示例相同,它声明可以将其命名为公共语言运行时字符串常量元数据字符串常量,在这种情况下似乎没有任何区别。至于我的理解,它只是简单地说,字符串常量格式为UTF-16。如果您想在ANSI格式中使用字符串,则必须使用占位符。 (因为我对这个话题不熟悉,所以我无法解释。)

所以我对这个问题的结论是它只是归结为元数据的UTF-16编码。