为什么 gdb 寄存器和堆栈值不相等?
Why does gdb register and stack value are not equals?
我在 x86 上做了一个汇编程序,这个程序有一个我不明白的行为。我想找出使用 _start 和 $_start 之间的区别。当 $_start 被视为立即数(即地址)时,_start 被视为要到达的地址。
但是,当我想用 gdb 检查 _start 位置的内容时:
x _start
我没有得到位于 _start 地址的正确数字。如图所示,0xFFFFFFB8 在内存中_start 地址处,但 0xFFFFFFFCC 被移动到 %ebx 寄存器。当我复制地址 (_start - 4) 和 (_start + 4) 的值时,这项工作完美无缺。
你知道这可能来自哪里吗?
Jester 是对的,这实际上是来自 gdb 的 int 3 指令。你可以在这里看到一个 post about this.
我在 x86 上做了一个汇编程序,这个程序有一个我不明白的行为。我想找出使用 _start 和 $_start 之间的区别。当 $_start 被视为立即数(即地址)时,_start 被视为要到达的地址。 但是,当我想用 gdb 检查 _start 位置的内容时:
x _start
我没有得到位于 _start 地址的正确数字。如图所示,0xFFFFFFB8 在内存中_start 地址处,但 0xFFFFFFFCC 被移动到 %ebx 寄存器。当我复制地址 (_start - 4) 和 (_start + 4) 的值时,这项工作完美无缺。
你知道这可能来自哪里吗?
Jester 是对的,这实际上是来自 gdb 的 int 3 指令。你可以在这里看到一个 post about this.