c - 二进制相位 5 和四位索引
问题描述
我正在尝试解决二进制炸弹练习的第 5 阶段,该练习要求用户输入一个由 6 个字符组成的字符串才能继续。虽然我发现 6 个字符需要加起来的总和是0x39
57,但是我无法理解这个过程。我为第 5 阶段找到的所有指南都建议从数组中选择 6 个总和为 0x1c/28 的数字,然后选择 6 个具有适当索引的字符作为“低 4 位”,但坦率地说,我不知道如何对应字母/字符到索引的低 4 位。
现在我从数组中有 6 个数字,总和为 28,分别是 1、3、4、5、6 和 9。但我不知道如何将这些对应于低 4 位。
这是第 5 阶段的代码,以防万一。
0x08048b58 <+0>: push %ebp
0x08048b59 <+1>: mov %esp,%ebp
0x08048b5b <+3>: push %edi
0x08048b5c <+4>: push %esi
0x08048b5d <+5>: push %ebx
=> 0x08048b5e <+6>: sub $0x1c,%esp
0x08048b61 <+9>: mov 0x8(%ebp),%ebx
0x08048b64 <+12>: mov %ebx,(%esp)
0x08048b67 <+15>: call 0x8048d10 <string_length>
0x08048b6c <+20>: cmp $0x6,%eax
0x08048b6f <+23>: je 0x8048b76 <phase_5+30>
0x08048b71 <+25>: call 0x8048e51 <explode_bomb>
0x08048b76 <+30>: mov $0x0,%edx
0x08048b7b <+35>: mov $0x0,%eax
0x08048b80 <+40>: mov $0x8049400,%ecx
0x08048b85 <+45>: movsbl (%ebx,%eax,1),%esi
0x08048b89 <+49>: and $0xf,%esi
0x08048b8c <+52>: add (%ecx,%esi,4),%edx
0x08048b8f <+55>: add $0x1,%eax
0x08048b92 <+58>: cmp $0x6,%eax
0x08048b95 <+61>: jne 0x8048b85 <phase_5+45>
0x08048b97 <+63>: cmp $0x39,%edx
---Type <return> to continue, or q <return> to quit---
0x08048b9a <+66>: je 0x8048ba1 <phase_5+73>
0x08048b9c <+68>: call 0x8048e51 <explode_bomb>
0x08048ba1 <+73>: add $0x1c,%esp
0x08048ba4 <+76>: pop %ebx
0x08048ba5 <+77>: pop %esi
0x08048ba6 <+78>: pop %edi
0x08048ba7 <+79>: pop %ebp
0x08048ba8 <+80>: ret ```
解决方案
推荐阅读
- serial-port - 如何通过 PICC 的寄存器设置激活 UART(rs-232)?
- python-3.x - 迭代地将新数据追加到 pandas 数据框列并与另一个数据框连接
- python - OpenCV 检测相机但不返回图像馈送,而 guvcview 确实
- amazon-web-services - 按存储桶策略列出 S3 存储桶
- python - 为什么这几乎相同的代码会产生不同的结果
- python-3.x - Pytest 运行 unittest 失败,出现属性错误
- python - 过滤从当前季度开始到本月末数据所属的 pandas 数据框中的行
- linux - sed 对 tail -f 和 tail 的工作方式不同?
- c++ - 用于构建 DLL 的 C++ 源文件:从文件中读取文本并将其替换为另一个文件
- dataweave - Mule ESB:如何将二进制形式的有效负载转换为 mule 4、dw 2.0 中的数组