问题标签 [machine-code]
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.
assembly - 汇编代码是跨平台的吗?
0x042444FF
是机器代码,inc dword ptr [esp+4]
而是汇编代码,我知道机器代码不是跨平台的,因为它取决于许多因素。
汇编代码呢,它取决于 CPU 吗?
assembly - 是否有命令行工具来获取汇编指令的机器代码?
我需要这个工具来知道哪个部分意味着inc
,dword
反之亦然。
assembly - 十六进制序列如何毫无歧义地翻译成汇编?
像上面这样的一个序列可以用各种方式进行分段,每个段都可以翻译成相应的汇编指令,但是每个二进制可执行文件都有其唯一的 DEFINITE 汇编,避免歧义的数学原理是什么?
更新
得票最多的答案实际上根本没有回答我的问题。
cpu - CPU如何知道它的指令集?
基本的电脑操作问题,但我不知道怎么问。当我们说计算机具有指令集时,计算机如何知道该指令集是什么?它存储在ROM芯片中吗?它是否存储在CPU中的某个地方?制造商将它放在哪里以便它可以读取磁盘并开始处理机器代码?
binary - 填充的意义何在?
特别是,我正在阅读 OS X 上 Intel 32 的 Mach-O 二进制文件格式。在 FAT 标头之后,在第一个存档的偏移量之前有一大堆填充。所有这些填充有什么意义?
更具体地说,在 FAT 头和第一个存档(特别是 mach_header)之间有超过 4000 字节的填充。为什么要包含所有这些额外的字节?!OS X 是否喜欢在其所有通用二进制文件中添加 4 KB?
assembly - 如何判断 x86 指令的长度?
我正在查看汇编中的不同指令,我对如何确定不同操作数和操作码的长度感到困惑。
这是您应该从经验中了解的内容,还是有办法找出哪个操作数/运算符组合占用了多少字节?
例如:
所以问题是:
看到给定指令后,我如何推断其操作码需要多少字节?
compiler-construction - 将汇编语言编译为机器代码涉及哪些阶段
我正在尝试编写一个编译器来获取一个汇编文件,该文件将输出原始机器代码指令。
我找到了很多关于如何编写编译器的教程,但我想知道是否所有阶段都与汇编程序助记符有关。例如,考虑到汇编程序的简化的逐阶段格式,词法分析是否完全有必要,还是仍然需要,但格式更简单?
binary - 如何从可执行文件/目标文件中查看 0 和 1/机器代码?
我已经试过了,我用文本编辑器打开了一个 a.out 文件,但我只得到一堆字符,里面有一些指令,比如:
üÙ
c - AMD64 -- nopw 汇编指令?
在此编译器输出中,我试图了解nopw
指令的机器代码编码是如何工作的:
在http://john.freml.in/amd64-nopl有一些关于“nopw”的讨论。谁能解释 4004d2-4004e0 的含义?从操作码列表看,代码似乎66 ..
是多字节扩展。我觉得我可能会比我在这里得到更好的答案,除非我尝试探索操作码列表几个小时。
该 asm 输出来自 C 中的以下(疯狂)代码,该代码优化为一个简单的无限循环:
当使用 编译时gcc -O2
,编译器识别出无限递归并将其变成无限循环;事实上,它做得很好,以至于它实际上在main()
没有调用recurse()
函数的情况下循环。
编者注:使用 NOP 填充函数并不特定于无限循环。这是 Godbolt 编译器资源管理器上具有一系列 NOP 长度的函数集。