【发布时间】:2023-03-23 04:17:01
【问题描述】:
这是我在 gdb 中调试的两行二进制文件。这是 gcc 为 IA32 编译的 C 代码:
8049345: 8b 45 08 mov 0x8(%ebp),%eax
8049348: 89 04 24 mov %eax,(%esp)
我设置了display $eax,因此它会在每一步之后显示值。在第一行之后,display 表示:6: $eax = 134527652。
我可以x 134527652 或x $eax 我看到0x804baa4 <input_strings+100>: "1 1 1 1 1 1" 为什么 display 和 x 给我不同的结果?
我相信下一行是说将 eax 移动到 esp 存储的地址中?我有一个display $esp 设置,上面写着:2: $esp = (void *) 0xffffd540。
在第二个mov之前,我x 0xffffd540看到:0xffffd540: ""在mov之后我重复看到:
0xffffd540: "\244\272\004\bY\233\004\b\210\325\377\377\214\325\377\377\220\325\377\377\224\325\377\377\230\325\377\377\234\325\377\377\001"
我以为这条线会将 eax 移动到这个地址,但我显然不明白这里的东西?如果您想查看二进制文件中的任何其他行,请告诉我。
【问题讨论】:
-
我认为您对 eax 的值与它指向的地址的数据感到困惑。 134527652 是 0x804baa4。 “1 1 1 1 1 1”是该地址的数据(解释为字符)。