所以我正在为臭名昭着的学校炸药项目工作而且我已经停留在第5阶段。对于那些不熟悉bomblab的人来说,这个项目需要阅读汇编代码以确定消除各种二进制炸弹所需的正确输入"炸弹"。以下是第5阶段的汇编代码。
# git diff tools/bazel.rc
diff --git a/tools/bazel.rc b/tools/bazel.rc
index 9397f97..28476f3 100644
--- a/tools/bazel.rc
+++ b/tools/bazel.rc
@@ -1,4 +1,4 @@
-build:cuda --crosstool_top=@org_tensorflow//third_party/gpus/crosstool
+build:cuda --crosstool_top=@local_config_cuda//crosstool:toolchain
build:cuda --define=using_cuda=true --define=using_cuda_nvcc=true
build --force_python=py2
有人可以告诉我,到目前为止我的假设是否正确以及我的下一步应该是什么。我已经被困在这个上好几个小时而且我无处可去。
通过检查$ 0x4028c5,我确定输入必须是2个整数(%d%d)。 第65-82行是一个运行15次的循环。 $ edx充当计数器,与我的输入无关。 我相信数组0x4025c0在所有这些中起着至关重要的作用,但我不知道那个角色是什么。
Dump of assembler code for function phase_5:
=> 0x0000000000401077 <+0>: sub $0x18,%rsp
0x000000000040107b <+4>: lea 0x8(%rsp),%rcx
0x0000000000401080 <+9>: lea 0xc(%rsp),%rdx
0x0000000000401085 <+14>: mov $0x4028c5,%esi
0x000000000040108a <+19>: mov $0x0,%eax
0x000000000040108f <+24>: callq 0x400c30 <__isoc99_sscanf@plt>
0x0000000000401094 <+29>: cmp $0x1,%eax
0x0000000000401097 <+32>: jg 0x40109e <phase_5+39>
0x0000000000401099 <+34>: callq 0x401574 <explode_bomb>
0x000000000040109e <+39>: mov 0xc(%rsp),%eax
0x00000000004010a2 <+43>: and $0xf,%eax
0x00000000004010a5 <+46>: mov %eax,0xc(%rsp)
0x00000000004010a9 <+50>: cmp $0xf,%eax
0x00000000004010ac <+53>: je 0x4010da <phase_5+99>
0x00000000004010ae <+55>: mov $0x0,%ecx
0x00000000004010b3 <+60>: mov $0x0,%edx
0x00000000004010b8 <+65>: add $0x1,%edx
0x00000000004010bb <+68>: cltq
0x00000000004010bd <+70>: mov 0x4025c0(,%rax,4),%eax
0x00000000004010c4 <+77>: add %eax,%ecx
0x00000000004010c6 <+79>: cmp $0xf,%eax
0x00000000004010c9 <+82>: jne 0x4010b8 <phase_5+65>
0x00000000004010cb <+84>: mov %eax,0xc(%rsp)
0x00000000004010cf <+88>: cmp $0xf,%edx
0x00000000004010d2 <+91>: jne 0x4010da <phase_5+99>
0x00000000004010d4 <+93>: cmp 0x8(%rsp),%ecx
0x00000000004010d8 <+97>: je 0x4010df <phase_5+104>
0x00000000004010da <+99>: callq 0x401574 <explode_bomb>
0x00000000004010df <+104>: add $0x18,%rsp
0x00000000004010e3 <+108>: retq
End of assembler dump.