gpt4 book ai didi

.net - MSIL 虚拟地址

转载 作者:行者123 更新时间:2023-12-02 13:48:01 27 4
gpt4 key购买 nike

请查看下面的 MSIL 代码:

IL_00:  ldstr      "Hello World"
IL_05: call void [mscorlib]System.Console::WriteLine(string)
IL_10: ret

IL_00、IL_05 和 IL_10 是什么意思?我在大学读过操作系统概念,所以当时我了解 Windows 操作系统如何为进程分配虚拟内存。我也不明白为什么在上述情况下;地址增加 5。

托管代码是从 VB.NET 应用程序生成的。

我花了一些时间在 Google 上搜索此内容,并在 MSDN 上阅读了一些文章。我仍然不清楚,因此问题的原因。

最佳答案

它们只是由 IL 反汇编程序生成的虚假“地址”。 LDSTR 操作码需要 1 个字节作为操作码 0x72,4 个字节作为操作数。这是一个标记值,用于从存储字符串文字的元数据表中选择字符串。因此,下一个 IL 操作码从偏移量 5 开始。同样的配方,CALL 需要 1 个字节用于操作码(0x28),4 个字节用于操作数(方法 token )。因此下一个 IL 操作码从偏移量 10 开始。RET 需要 1 个字节 0x2A 并且没有操作数。 IL 代码总大小为 11 字节。

您的反汇编程序会生成这些“地址”来向您显示分支指令的目标。如果您没有,请尝试反汇编使用 if() 语句的代码来查看这一点。否则它们是无关紧要的,因为抖动将此代码转换为看起来非常不同的机器代码。

关于.net - MSIL 虚拟地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14546485/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com