assembly - 0x8($rsp) 的含义

标签 assembly gdb x86-64 disassembly

我第一次学习汇编语言。这是(gdb)反汇编的一部分:

mov    $0x131,%eax
cmp    0x8(%rsp),%eax  //Question here, what is the value of 0x8(%rsp)?




(gdb)i r
rax            0x131    305
rbx            0x7fffffffe578   140737488348536
rcx            0x20     32
rdx            0x7fffffffe478   140737488348280
rsi            0x0      0
rdi            0x1999999999999999       1844674407370955161
rbp            0x0      0x0
rsp            0x7fffffffe470   0x7fffffffe470
r8             0x37ed3bb080     240203313280
r9             0x0      0
r10            0x1e     30
r11            0x0      0
r12            0x400cb0 4197552
r13            0x7fffffffe570   140737488348528
r14            0x0      0
r15            0x0      0
rip            0x400fd9 0x400fd9 <phase_3+129>
eflags         0x212    [ AF IF ]
cs             0x33     51
ss             0x2b     43
ds             0x0      0
es             0x0      0
fs             0x0      0

我很难弄清楚它的比较是什么。 0x8(%rsp) 的值是多少。

(我知道这个问题听起来很愚蠢)

提前致谢

==========

最后我解决了

(gdb) p /x *(int *)($rsp+0x8)

在这篇文章的帮助下How to print -0x4(%rbp) in gdb?

Zack 的答案应该是正确的,但它不起作用,因为我使用的是 64 位操作系统。

最佳答案

括号通常意味着取消引用。 0x8(%rsp) 表示“获取堆栈上距堆栈指针 %rsp 8 个字节的位置,然后取出该地址处的值。”

它将 0x131 移动到 %eax 中,然后将其与该位置的数据进行比较。 cmp 根据该比较设置 eflags 寄存器(如操作数相等时的零标志等)

要使用 GDB 查看地址中的内容,请键入

(gdb) x/1dw 0x8($esp)

此命令x 检查内存。

  • 1 表示检查指定的任何单位的 1。

  • d 表示以十进制表示法输出(而不是十六进制)。我不知道您要比较的数据类型,因此您可以使用 c 获取字符,或 x 获取十六进制,或 >s 表示字符串,或者其他。

  • w 提供单位,在本例中是一个字,即 4 个字节。

因此,此命令查看给定地址 0x8(%rsp) 处的 4 个字节,并以十进制格式打印其中的任何内容。

请注意accessing register contents includes using $ in place of %.

要了解有关使用 GDB 查看内存变化情况的更多信息,请参阅 §10.6 in the user documentation .

关于assembly - 0x8($rsp) 的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19748074/

相关文章:

objective-c - 未注册线程上的GC操作

debugging - GDB 未捕获 SIGFPE

assembly - 需要帮助验证汇编代码

assembly - 在 MASM 中使用变量创建 for 循环以创建不同的 PROC 函数

linux - gcc,静态库,外部汇编函数变成 undefined symbol

c++ - 从一个到另一个调用裸函数?

c - 编写操作系统; asm 关键字问题

c++ - GDB——尝试定位本地主机时为 "Operation not permitted"

macos - 如何在asm中使用malloc

assembly - 有什么方法可以编写 Intel CPU 直接核对核通信代码吗?