Assembly 二进制炸弹阶段2检索0xc中的值(%ebx)
我正在研究二进制炸弹,并试图找出如何在cmp语句中比较值,我的理解是eax是我输入的,0xc(%ebx)是6个数字中的第一个/第二个/等等的答案。我正在查看的代码是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,
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
,它将包含(部分)您输入的数字。代码正在检查有关输入的数字的一些内容。