相关疑难解决方法(0)

为什么静态变量的地址相对于指令指针?

我正在按照本教程关于装配.

根据教程(我也在本地尝试,并得到类似的结果),以下源代码:

int natural_generator()
{
        int a = 1;
        static int b = -1;
        b += 1;              /* (1, 2) */
        return a + b;
}
Run Code Online (Sandbox Code Playgroud)

编译到这些汇编指令:

$ gdb static
(gdb) break natural_generator
(gdb) run
(gdb) disassemble
Dump of assembler code for function natural_generator:
push   %rbp
mov    %rsp,%rbp
movl   $0x1,-0x4(%rbp)
mov    0x177(%rip),%eax        # (1)
add    $0x1,%eax
mov    %eax,0x16c(%rip)        # (2)
mov    -0x4(%rbp),%eax
add    0x163(%rip),%eax        # 0x100001018 <natural_generator.b>
pop    %rbp
retq   
End of assembler dump.
Run Code Online (Sandbox Code Playgroud)

(行号的意见(1),(2) …

c assembly gcc cpu-registers

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

为什么此MOVSS指令使用相对RIP寻址?

我在反汇编程序(浮点逻辑c ++)中找到了以下汇编代码。

  842: movss  0x21a(%rip),%xmm0 
Run Code Online (Sandbox Code Playgroud)

我知道,当进程rip将一直为842且此0x21a(%rip)将为const。使用该寄存器似乎有些奇怪。

我想知道使用rip相对地址代替其他寻址有什么好处。

x86 assembly x86-64 disassembly addressing-mode

2
推荐指数
1
解决办法
1378
查看次数

标签 统计

assembly ×2

addressing-mode ×1

c ×1

cpu-registers ×1

disassembly ×1

gcc ×1

x86 ×1

x86-64 ×1