- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图了解机器代码是如何从汇编代码形成的。
我正在使用 NASM 汇编器
例如,我有一个像这样的汇编代码:
BITS 64;
mov rbx, 0x0123456789abcdef;
mov rax, rbx;
add rax, rax;
ret;
我运行nasm example.S
我把它拆开ndisasm -b64 example.S
(对于 64 位 Little-endian 机器)
我得到这样的机器代码:
00000000 48BBEFCDAB896745 mov rbx,0x123456789abcdef
-2301
0000000A 4889D8 mov rax,rbx
0000000D 4801C0 add rax,rax
00000010 C3 ret
有人可以解释一下给定的机器代码和汇编代码之间的关系是什么。如何计算出每条指令和寄存器的操作码。
最佳答案
如果您有机器代码并想了解它是如何来自程序集的:
第 1 步:查找您的处理器架构的指令集摘要。
第 2 步:查找每条指令中的哪些机器代码位包含操作码。此时,二进制机器代码很有用,除非您精通十六进制到二进制转换。此时您还应该查看字节顺序。
第3步:查找操作码对应的指令。
第 4 步:查看指令描述并找出哪些位属于哪个指令字段(目标寄存器、地址、立即数等)。
第五步:根据各栏的数字写出说明。您可能需要查找哪些寄存器对应于哪些数字。
现在你已经反汇编了你的机器代码。
要学习/训练它,首先尝试使用 AVR Assembly 之类的东西可能是谨慎的做法,因为它只有 16 位指令。
如果您有程序集并希望手动将其汇编成机器代码:
第 1 步:查找您的处理器架构的指令集摘要。
第 2 步:找到您要汇编的指令。
第3步:用指令帧所需的数据填充相关位。
关于c - 汇编语言是如何生成机器码的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920226/
我们都知道在x86 arch中,数据和代码混合在内存或磁盘中。但是怎么告诉他们呢? paper需要这个方法,我不期望100%的准确率。 80% 还可以,即使是一些想法也可以:) 最佳答案 统计确定哪些
我在 Google 上进行了大量研究,寻找一种可以将机器代码直接包含在汇编源文件中的方法。我没有任何运气。 我所说的“内联机器代码”的意思可能不清楚,所以让我为您提供一个我正在寻找的示例: ; her
我们都知道在x86 arch中,数据和代码混合在内存或磁盘中。但是怎么告诉他们呢? paper需要这个方法,我不期望100%的准确率。 80% 还可以,即使是一些想法也可以:) 最佳答案 统计确定哪些
汇编、机器码、字节码和操作码之间的实际关系是什么? 我已经阅读了大部分关于汇编和机器代码的 SO 问题,例如 this ,但它们太高级了,没有显示实际汇编代码转换为机器代码的示例。结果,我仍然不明白它
让 objdump 反汇编原始 x64 代码的正确架构是什么?你会认为-m x86-64应该通过阅读帮助来工作,但事实并非如此。我尝试了 cygwin64 版本: $ objdump --versio
有没有办法将 .NET 程序集编译成 native 代码(即 x86)输出,也就是说,没有 MSIL。 据我了解,如果您仅将 x86 指定为体系结构,这只会更改 PE header 以将其指向 JIT
对于此 C 源代码: int add(int a, int b) { return a + b; } ,用于 8086 的 Watcom C 编译器 (wcc -s -ms -os -0 prog.c
我是一名优秀的程序员,十分优秀!