Assembly 二进制炸弹阶段2检索0xc中的值(%ebx)

Assembly 二进制炸弹阶段2检索0xc中的值(%ebx),assembly,gdb,compare,offset,Assembly,Gdb,Compare,Offset,我正在研究二进制炸弹,并试图找出如何在cmp语句中比较值,我的理解是eax是我输入的,0xc(%ebx)是6个数字中的第一个/第二个/等等的答案。我正在查看的代码是 0x08048e22 <+0>: push %ebp 0x08048e23 <+1>: mov %esp,%ebp 0x08048e25 <+3>: sub $0x48,%esp 0x08048e28 <+6>: mov %ebx,

我正在研究二进制炸弹,并试图找出如何在cmp语句中比较值,我的理解是eax是我输入的,0xc(%ebx)是6个数字中的第一个/第二个/等等的答案。我正在查看的代码是

0x08048e22 <+0>:     push   %ebp
0x08048e23 <+1>:     mov    %esp,%ebp
0x08048e25 <+3>:     sub    $0x48,%esp
0x08048e28 <+6>:     mov    %ebx,-0xc(%ebp)
0x08048e2b <+9>:     mov    %esi,-0x8(%ebp)
0x08048e2e <+12>:    mov    %edi,-0x4(%ebp)
0x08048e31 <+15>:    lea    -0x30(%ebp),%ebx
0x08048e34 <+18>:    mov    %ebx,0x4(%esp)
0x08048e38 <+22>:    mov    0x8(%ebp),%eax
0x08048e3b <+25>:    mov    %eax,(%esp)
0x08048e3e <+28>:    call   0x8049248 <read_six_numbers>
0x08048e43 <+33>:    lea    -0x24(%ebp),%edi
0x08048e46 <+36>:    mov    $0x0,%esi
0x08048e4b <+41>:    mov    (%ebx),%eax
=>0x08048e4d <+43>:    cmp    0xc(%ebx),%eax
0x08048e50 <+46>:    je     0x8048e57 <phase_2+53>
0x08048e52 <+48>:    call   0x8049206 <explode_bomb>
0x08048e57 <+53>:    add    (%ebx),%esi
0x08048e59 <+55>:    add    $0x4,%ebx
0x08048e5c <+58>:    cmp    %edi,%ebx
0x08048e5e <+60>:    jne    0x8048e4b <phase_2+41>
0x08048e60 <+62>:    test   %esi,%esi
0x08048e62 <+64>:    jne    0x8048e69 <phase_2+71>
0x08048e64 <+66>:    call   0x8049206 <explode_bomb>
0x08048e69 <+71>:    mov    -0xc(%ebp),%ebx
0x08048e6c <+74>:    mov    -0x8(%ebp),%esi
0x08048e6f <+77>:    mov    -0x4(%ebp),%edi
0x08048e72 <+80>:    mov    %ebp,%esp
0x08048e74 <+82>:    pop    %ebp
0x08048e75 <+83>:    ret
0x08048e22:推送%ebp
0x08048e23:mov%esp,%ebp
0x08048e25:子$0x48,%esp
0x08048e28:mov%ebx,-0xc(%ebp)
0x08048e2b:mov%esi,-0x8(%ebp)
0x08048e2e:mov%edi,-0x4(%ebp)
0x08048e31:lea-0x30(%ebp),%ebx
0x08048e34:mov%ebx,0x4(%esp)
0x08048e38:mov 0x8(%ebp),%eax
0x08048e3b:mov%eax,(%esp)
0x08048e3e:呼叫0x8049248
0x08048e43:lea-0x24(%ebp),%edi
0x08048e46:mov$0x0,%esi
0x08048e4b:mov(%ebx),%eax
=>0x08048e4d:cmp0xc(%ebx),%eax
0x08048e50:je 0x8048e57
0x08048e52:调用0x8049206
0x08048e57:添加(%ebx),%esi
0x08048e59:添加$0x4,%ebx
0x08048e5c:cmp%edi,%ebx
0x08048e5e:jne 0x8048e4b
0x08048e60:测试%esi,%esi
0x08048e62:jne 0x8048e69
0x08048e64:调用0x8049206
0x08048e69:mov-0xc(%ebp),%ebx
0x08048e6c:mov-0x8(%ebp),%esi
0x08048e6f:mov-0x4(%ebp),%edi
0x08048e72:mov%ebp,%esp
0x08048e74:弹出%ebp
0x08048e75:ret
我认为我需要做的是正确的吗?如果没有,请给出正确方向的提示,以及检查cmp语句中到底比较了什么的方法


谢谢

大概看了一天后,我意识到compare语句所做的就是确保输入的第一个和第四个、第二个和第五个、第三个和第六个数字都相等。感谢jester提供的ebx指向第一个本地变量的信息。

ebx
最初指向输入的第一个数字,然后是其余数字。那么eax是必要的数字吗?因为在检查寄存器的信息时,eax往往与我输入的匹配,所以ebx中的值不是我需要找到的吗?因为行
+41
加载到
eax
,它将包含(部分)您输入的数字。代码正在检查有关输入的数字的一些内容。