- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有以下 C# 代码。
public void HelloWorld()
{
Add(2, 2);
}
public void Add(int a, int b)
{
//Do something
}
它产生以下CIL
.method public hidebysig instance void HelloWorld() cil managed
{
// Code size 11 (0xb)
.maxstack 8
IL_0000: nop
IL_0001: ldarg.0
IL_0002: ldc.i4.2
IL_0003: ldc.i4.2
IL_0004: call instance void ConsoleApplication3.Program::Add(int32,
int32)
IL_0009: nop
IL_000a: ret
} // end of method Program::HelloWorld
现在,我不明白的是偏移量 0001 处的行:
ldarg.0
我知道那个操作码是做什么用的,但我真的不明白为什么要在这个方法中使用它,因为没有参数,对吧?
有人知道为什么吗? :)
最佳答案
在实例方法中有一个索引为 0 的隐式参数,表示调用该方法的实例。它可以使用 ldarg.0
操作码加载到 IL 评估堆栈上。
关于c# - 即使没有参数,也使用 CIL OpCode (Ldarg_0),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16346155/
我有一个递归函数 emit : Map -> exp -> unit哪里il : ILGenerator对函数来说是全局的,并且 exp是一个判别联合,表示带有大小写 InstanceCall of
我正在使用 ASM 框架进行 java 字节码操作。 ASM中出现两次的一些操作码助记符,它们以“H_”为前缀: Opcodes.H_GETFIELD vs. Opcodes.GETF
谁能告诉我以下段错误究竟意味着什么? Unhandled dwarf expression opcode 0x93 它在solaris 10 i386上。 任何建议表示赞赏。 最佳答案 如果您的 GD
在构建芯片 8 仿真器时,我遇到了芯片 8 信息的 2 个主要来源似乎不同的问题,这对整个芯片 8 解释器有影响。 一方面,我们有 wikipedia , 在操作码 FX65 下告诉我们 “用从地址
在intel software developers manual volumen 2A chapter 2.1.2说 Two-byte opcode formats for general-purp
.NET Framework 4.0 向 Reflection API 引入了多项内容,这些内容对我的工作从极其有用到至关重要。其中包括 Assembly、Module、MethodBody 和 Lo
我正在使用 Kony Studio 开发应用程序。我已经使用 Eclipse 完成了登录验证,以编写用于创建 Web 服务以连接到 oracle10g 数据库的代码。但是在前端,当我尝试将前端连接到
当您在堆栈顶部引用 (B) 的实例时,是否有必要发出 OpCode.CastClass(typeof(A)),其中 B 是派生自 A 的类,当准备调用方法时类型 A 的参数? 添加: interfac
如果我有一个 lua 脚本,比如 print("Hello, world!") 我如何获得与之等效的指令或操作码? (用于 luaV_execute) 最佳答案 您几乎不需要对 Lua 的解释器做一个
我们的计算机体系结构教授给了我们一个示例程序,要求输入密码。任务是在比较输入的密码并决定是否正确后更改跳转操作码。我编写了一个程序,可以更改给定二进制文件中特定位置的任何字节。 这是密码程序的代码:
我有一个包含以下代码的汇编程序。 这段代码对于英特尔处理器来说编译得很好。但是,当我使用 PPC(交叉)编译器时,我收到一个错误,提示无法识别操作码。我试图找出是否有 PPC 架构的等效操作码。 .f
这可能是一个非常奇怪的问题,但我一直在小人电脑上做一些工作,这让我有点恼火,不仅没有操作代码 4,而且互联网上也绝对没有关于为什么。 操作码从 0 到 9 但跳过 4。从来没有任何以 4 开头的三位数
我正在阅读Go源代码,就像读过一样,当我阅读fastrand()函数时(对于我的机器,该函数位于asm_amd64.s文件中),我遇到了以下片段: XORL $0x88888eef, D
我设置了一个简单的 Geth (v1.10.2-stable-97d11b01) 专用网络(下面的 genesis.json 配置)。我编译并部署了这个简单的测试合约(solidity版本:0.8.4
我对此很陌生。我试图以清晰的方式理解上述术语之间的区别,但是,我仍然感到困惑。这是我发现的: 在计算机汇编语言中,助记符是操作的缩写。它被输入到每个汇编程序指令的操作码字段中。例如 AND AC,37
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 这个问题是由于错别字或无法再重现的问题引起的。虽然类似的问题可能是on-topi
我正在尝试为属性生成动态代理。 生成的代理源 self 们要代理的类型。当代理需要访问其派生类型的(虚拟)属性时,不能使用 OpCodes.Callvirt - 它会导致无限递归。因此我们需要调用Op
有什么办法可以改变OpCodes.Ret跳转到的地址吗? IL 中的方法可以更改 C# 使用的调用堆栈吗? 据我所知,在 C++ 中,您可以访问堆栈上的值并更改返回地址等。在 IL 中,除了“Inva
我已经在我的 linuxbox 上安装了 Zend OpCache。我使用以下命令安装扩展: sudo pecl install zendopcache-7.0.2 现在,无需修改我的 php.ini
许多框架利用 spl_autoload_register() 来动态加载类(即 Controller 和模型)。有几篇关于自动加载和操作码缓存问题的帖子。特别是一篇帖子有@cletus 的回复,其中引
我是一名优秀的程序员,十分优秀!