小编ric*_*ick的帖子

操作码'89'的x86 Modrm/Sib/Displacement字节

我正在为32位x86指令集开发一个反汇编程序.我的代码目前正确解码大多数1和2字节操作码,但我遇到了一个问题.当我将代码的输出与Objdump进行比较时,我发现Objdump看到以下内容: -

89 14 98                mov    %edx,(%eax,%ebx,4)

8b 45 d8                mov    -0x28(%ebp),%eax
Run Code Online (Sandbox Code Playgroud)

另一方面,我的代码给出: -

89 14 98 8B 45 D8 89   MOV.
Run Code Online (Sandbox Code Playgroud)

根据我对Intels文档(特别是Modrm和Sib寻址表格表)的理解,这个字节流应解释为: -

89 - The opcode
14 - The Modrm byte
98 - The Sib byte specified by the Modrm byte (as shown in Intels Modrm addressing table)
8B 45 D8 89 - The four byte displacement specified by the Sib byte (as shown in Intels Sib addressing table).
Run Code Online (Sandbox Code Playgroud)

Objdump说没有位移字节,但我的代码和英特尔文档都出现(至少对我来说).

如果有人能够指出我的错误在哪里,那将非常感激.

谢谢.

x86 assembly disassembly

6
推荐指数
1
解决办法
1695
查看次数

什么是glibc GLRO宏?

我目前正在尝试了解glibc启动例程(__libc_start_main)如何处理Elf辅助矢量类型(auxv_t).

浏览glibc的源代码,我找到了一些名为GLRO的函数的引用.在尝试追踪此函数的定义时,我能找到的最接近的是

#define GLRO(x) _##x
Run Code Online (Sandbox Code Playgroud)

当我搜索" ## x"时,我发现的是其他类似的"#define"指令,让我感到困惑.这个定义是什么意思?" ## x"是某种编译器指令吗?

c glibc

5
推荐指数
2
解决办法
1465
查看次数

标签 统计

assembly ×1

c ×1

disassembly ×1

glibc ×1

x86 ×1