我正在研究二进制炸弹,并试图弄清楚如何在 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
我认为我需要做的事情是否正确?如果没有,请提供正确方向的提示,以及检查该 cmp 语句中确切比较的内容的方法。
谢谢!
想
通了=)经过一天左右的凝视,我意识到比较语句所做的只是确保输入的第1和第4,第2和第5,第3和第6个数字都是等价的。感谢小丑提供的 ebx 指向第一个本地变量的信息。