如何解决如何根据汇编指令解释 x86-64 指令字节?
我创建了一个简单的汇编程序。几个问题:
- 下面的每条指令都以 0x48 开头。但是,我不认为这是此参考资料中说明的一部分: http://ref.x86asm.net/coder64.html#x89
例如,x05 是将立即数添加到寄存器的添加指令,但不是 0x0548。以下其他说明类似。
-
rax、rbx 是如何在二进制中编码的?例如。为什么使用 rbx 比 rax 多一个字节?
401000: 48 05 34 12 00 00 add rax,0x1234 40100c: 48 81 c3 34 12 00 00 add rbx,0x1234
-
与上面相同的问题,但是一个不同的例子。为什么将源寄存器更改为 rbx,导致 c0 更改为 d8?
401006: 48 01 c0 add rax,rax 401009: 48 01 d8 add rax,rbx
$ objdump -d assembly_test
assembly_test: file format elf64-x86-64
Disassembly of section .text:
0000000000401000 <_start>:
401000: 48 05 34 12 00 00 add rax,0x1234
401006: 48 01 c0 add rax,rax
401009: 48 01 d8 add rax,rbx
40100c: 48 81 c3 34 12 00 00 add rbx,0x1234
401013: 48 c7 c0 34 12 00 00 mov rax,0x1234
40101a: 48 89 c0 mov rax,rax
40101d: 48 89 d8 mov rax,rbx
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。