这是我在 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 移到这个地址,但我显然不明白这里的东西?如果您想查看二进制文件中的任何其他行,请告诉我。