问题标签 [opcode]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
800 浏览

php - 查看 PHP 操作码

可能重复:
如何获取 PHP 的操作码?

当我深入研究使用特定语言进行开发时,在某些时候,如果可能的话,我喜欢查看该语言的操作码,以便更深入地了解我的代码是如何解释或编译的。C/C++ 你通常可以在 IDE 中切换到反汇编视图,或者让编译器输出它的指令。Flash,您可以使用诸如 flasm 之类的实用程序来查看发生了什么..

是否有查看 PHP 操作码的选项?我查看了php命令行参数,但什么也没看到(也许我只是错过了它?)。

0 投票
6 回答
10893 浏览

assembly - PowerPC 操作码表?

我有兴趣为自己的学习目的开发 PowerPC 仿真器。我在 PowerPC 汇编中找到了大量有关编程的资源,但是经过一段时间的查找,我还没有在任何地方找到指令/操作码映射表。当然,我需要操作码才能编写模拟器。我在哪里可以找到一个?

0 投票
7 回答
39944 浏览

assembly - 英特尔 x86 操作码参考?

在 x86中查找任意操作码的含义(例如)的相对快速且简单的方法是什么?0xC8

搜索英特尔软件开发人员手册并不是很有趣...

0 投票
4 回答
7166 浏览

c++ - 在 C/C++ 中解码和匹配芯片 8 操作码

我正在编写一个 Chip 8 仿真器作为仿真的介绍,我有点迷路了。基本上,我已经读取了 Chip 8 ROM 并将其存储在内存中的 char 数组中。然后,按照指南,我使用以下代码在当前程序计数器(pc)处检索操作码:

芯片 8 个操作码每个是 2 个字节。这是来自指南的代码,我模糊地理解为向 memory[pc] 添加 8 个额外的位空间(使用 << 8),然后将 memory[pc + 1] 与其合并(使用 |)并将结果存储在操作码变量中.

然而,现在我已经隔离了操作码,我真的不知道如何处理它。我正在使用这个操作码表,我基本上迷失了将我读取的十六进制操作码与该表中的操作码标识符匹配。此外,我意识到我正在阅读的许多操作码也包含操作数(我假设后一个字节?),这可能使我的情况更加复杂。

帮助?!

0 投票
3 回答
3488 浏览

c# - 使用 Br_S OpCode 使用 Reflection.Emit.Label 指向下一条指令

我正在尝试解析 IL 以发出一种方法。我在 string[] 中获得了一个方法的 IL 代码,其中每个字符串都是一条 IL 指令。我正在循环这个数组并使用 ILGenerator 添加操作码:

这是我需要重现的 IL:

这是我得到的输出:

如您所见, br.s 调用指向自身,这当然会导致无限循环。如何让它指向源代码中的以下指令?这与使用 Reflection.Emit.Label 有关,但我不确定它是如何工作的。

编辑顺便说一下,上面看到的 IL 是针对这种简单方法的,

0 投票
3 回答
2487 浏览

assembly - 哪个更快:JMP 或 NOP 字符串?

我正在实现二进制翻译,并且必须处理长度约为 16 个操作码的 NOP(0x90)序列。将 JMP(到结尾)放在此类序列的开头是否更好?

0 投票
1 回答
8948 浏览

assembly - MIPS 堆栈帧(和“addiu”指令混淆)

我是 MIPS 的新手,正在尝试了解函数的反汇编。
(编辑:它动态链接到 /lib/ld-uClib.so.0 并使用一些常用的 libc 函数,所以我假设它是使用 uClibc 工具链用 C 编写的,因此应该具有调用过程和堆栈框架等.)。

在功能开始时

然后在函数结束时:

问题 #1:
尽管在互联网上搜索了一段时间,但我仍然不明白 gp 应该如何在 stackframe 中使用。

特别是,我阅读的文档说调用过程标准是 a0-a3 用作函数输入,v0-v3 作为函数输出,s0-s8 在调用中保留,t0-t9 在任何调用中都不会保留。所以 s0-s8 的推送和弹出是有意义的。 但是为什么要根据t9中的值来设置gp!?

问题 #2:
我不明白为什么它会移动堆栈指针两次。它似乎两次保留本地空间。

最重要的是,addiu 指令被反汇编为一个没有意义的负数,因为 'u' 表示无符号,但是除非我真的认为它是一个负数,否则代码没有意义。我通过在 en.wikipedia.org/wiki/MIPS_architecture 上查找来仔细检查了操作码。它确实是“addiu”而不是“addi”。我在这里很困惑。

0 投票
2 回答
686 浏览

linux - 没有 %gs 寄存器的 x86 子集:使用 %gs 而不是陷入仿真的二进制补丁代码?

由于这里无法解释的复杂原因,我需要在 x86 子集的平台上运行 x86 GCC 编译的 Linux 程序。这个平台没有 %gs 寄存器,这意味着它必须被模拟,因为 GCC 依赖于 %gs 寄存器的存在。

目前我有一个包装器,它在程序尝试访问 %gs 寄存器时捕获异常并模拟它。但这是狗慢。有没有办法可以使用等效指令提前修补 ELF 中的操作码,从而避免陷阱和模拟?

0 投票
2 回答
1880 浏览

assembly - x86 操作码编码中的方向/符号扩展位

在 x86 指令集中,操作码索引 1 处的位可以是指定目标和源操作数的方向位,也可以是符号扩展位。

例如对于add

  • 00 /r ADD r/m8, r802 /r ADD r8, r/m8
    该位区分r/m, regreg, r/m相同的助记符
  • 81 /0 id ADD r/m32, imm3283 /0 ib ADD r/m32, imm8
    完整(第 1 位清零)与符号扩展立即数(第 1 位设置)

我想知道确定其中哪种情况的最简单的逻辑方法是什么。除了检查指令操作码并比较它们以找出它是什么(对于指令的符号扩展或方向位变体)之外,还有其他方法可以检查吗?还有一些指令忽略该位,但由于它设置为 0,所以它并不重要。

编辑:事实证明,对于写错误(这是我的代码的目的), reg->r/m 总是如此,因为 ar/m->reg 指令永远不会触发写错误。但是,如果其他人遇到类似问题,任何信息仍然会很好。

0 投票
5 回答
5235 浏览

assembly - 从操作码中查找指令中的操作数数量

我打算编写自己的小型反汇编程序。我想解码读取可执行文件时得到的操作码。我看到以下操作码:

必须对应于:

现在,“imul”指令可以有两个或三个操作数。我如何从那里的操作码中弄清楚这一点?

它基于英特尔的 i386 指令集。