assembly - 如何解决二元炸弹实验室的第 4 阶段
问题描述
00000000004010d0 <func4>:
4010d0: 48 83 ec 08 sub $0x8,%rsp
4010d4: 89 d0 mov %edx,%eax
4010d6: 29 f0 sub %esi,%eax
4010d8: 89 c1 mov %eax,%ecx
4010da: c1 e9 1f shr $0x1f,%ecx
4010dd: 01 c8 add %ecx,%eax
4010df: d1 f8 sar %eax
4010e1: 8d 0c 30 lea (%rax,%rsi,1),%ecx
4010e4: 39 f9 cmp %edi,%ecx
4010e6: 7e 0c jle 4010f4 <func4+0x24>
4010e8: 8d 51 ff lea -0x1(%rcx),%edx
4010eb: e8 e0 ff ff ff callq 4010d0 <func4>
4010f0: 01 c0 add %eax,%eax
4010f2: eb 15 jmp 401109 <func4+0x39>
4010f4: b8 00 00 00 00 mov $0x0,%eax
4010f9: 39 f9 cmp %edi,%ecx
4010fb: 7d 0c jge 401109 <func4+0x39>
4010fd: 8d 71 01 lea 0x1(%rcx),%esi
401100: e8 cb ff ff ff callq 4010d0 <func4>
401105: 8d 44 00 01 lea 0x1(%rax,%rax,1),%eax
401109: 48 83 c4 08 add $0x8,%rsp
40110d: c3 retq
000000000040110e <phase_4>:
40110e: 48 83 ec 18 sub $0x18,%rsp
401112: 48 8d 4c 24 08 lea 0x8(%rsp),%rcx
401117: 48 8d 54 24 0c lea 0xc(%rsp),%rdx
40111c: be 7d 28 40 00 mov $0x40287d,%esi
401121: b8 00 00 00 00 mov $0x0,%eax
401126: e8 b5 fb ff ff callq 400ce0 <__isoc99_sscanf@plt>
40112b: 83 f8 02 cmp $0x2,%eax
40112e: 75 07 jne 401137 <phase_4+0x29>
401130: 83 7c 24 0c 0e cmpl $0xe,0xc(%rsp)
401135: 76 05 jbe 40113c <phase_4+0x2e>
401137: e8 08 05 00 00 callq 401644 <explode_bomb>
40113c: ba 0e 00 00 00 mov $0xe,%edx
401141: be 00 00 00 00 mov $0x0,%esi
401146: 8b 7c 24 0c mov 0xc(%rsp),%edi
40114a: e8 81 ff ff ff callq 4010d0 <func4>
40114f: 83 f8 05 cmp $0x5,%eax
401152: 75 07 jne 40115b <phase_4+0x4d>
401154: 83 7c 24 08 05 cmpl $0x5,0x8(%rsp)
401159: 74 05 je 401160 <phase_4+0x52>
40115b: e8 e4 04 00 00 callq 401644 <explode_bomb>
401160: 48 83 c4 18 add $0x18,%rsp
401164: c3 retq
这是我需要解决的汇编代码。我已经在c中找到了function4,它是:
public static int func4(int a, int b, int c) {
int x = c - b;
int y = x >> 31;
x = x + y;
x = x >> 1;
y = x + b;
if(y <= a) {
if(y >= a) {
return 0;
} else {
return 2 * func4(a, y+1, c) +1;
}
} else {
return 2 * func4(a, b, y-1);
}
}
func4 中 b 和 c 的输入是 0 和 14;我的任务是解决阶段的正确输入。我知道输入的形式是“%d %d”,据我所知,我知道第一个输入必须小于 14,我相信第二个输入应该等于 5。我尝试解决自己和第一个输入得到 10,第二个输入得到 5,这是错误的。任何帮助,将不胜感激。
解决方案
推荐阅读
- python - 熊猫总和然后除以唯一计数
- jupyter-notebook - 将 nbextensions 与 Jupyter Server 一起使用的正确方法是什么(WinPython 3.8.8)
- java - 将对象列表转换为地图
使用地图/流/收集 - java - Android 房间查询返回 null
- phpunit - 如何在 Symfony 3.4 的单元测试中使用数据库中的数据?
- php - php的智能高亮功能
- java - 如何创建允许用户从 Java 列表中选择某些元素的弹出菜单?
- java - 如何在 Java 中从另一个包和文件夹导入类?
- ajax - JSF:如何在父元素的复合组件中获取 id
- svelte - 如何在 Svelte 3 中有条件地添加和删除`use:`属性?