【问题标题】:How to display value having RIP relative address in gdb?如何在 gdb 中显示具有 RIP 相对地址的值?
【发布时间】:2015-07-14 07:28:16
【问题描述】:

我想显示一个整数

global.variable+8(%rip)

我该怎么做?这个地址到底是什么意思?是global.variable + %rip + 8的地址,不是吗?

【问题讨论】:

    标签: assembly gdb x86-64


    【解决方案1】:

    global.variable+8(%rip)global.variable + 8 的地址。它只是在指令编码中以相对于 RIP 的方式编码。

    在下面的示例中,您可以看到global_variable+8(%rip)*(((long long *)(&global_variable)) + 1) 引用相同的地址:

    t.S

    #include <sys/syscall.h>
    
        .section .rodata
    global_variable:
        .long 0x12345678
        .long 0x9abcdef0
        .long 0xdeadbeef
        .long 0x55aa55aa
    
        .section .text
        .global _start
    _start:
        mov global_variable+8(%rip), %rax
        int $0x3 /* software breakpoint
                    breaks into debugger */
    
        mov $SYS_exit_group, %rax
        mov $0, %rdi
        syscall
    

    t.gdb

    file t
    run
    
    printf "rax: 0x%lx\n", $rax
    set variable $gv1 = *(((long long *)(&global_variable)) + 1)
    printf "global_variable[1]: 0x%lx\n", $gv1
    
    quit
    

    示例会话

    $ gdb -x t.gdb
    
    Program received signal SIGTRAP, Trace/breakpoint trap.
    _start () at t.S:17
    17      mov $SYS_exit_group, %rax
    rax: 0x55aa55aadeadbeef
    global_variable[1]: 0x55aa55aadeadbeef
    

    【讨论】:

      猜你喜欢
      • 2020-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 2013-01-07
      • 2020-10-31
      • 2018-06-15
      • 2015-12-22
      相关资源
      最近更新 更多