213 lab2 bomb
来源:互联网 发布:r软件怎么使用说明 编辑:程序博客网 时间:2024/04/29 23:23
第二个实验 反编译得到汇编码 主要有6个phase和一个隐藏phase
phase1
0000000000400ee0 <phase_1>: 400ee0:48 83 ec 08 sub $0x8,%rsp 400ee4:be 00 24 40 00 mov $0x402400,%esi //将地址0x402400内储存的内容放到寄存器esi中 400ee9:e8 4a 04 00 00 callq 401338 <strings_not_equal>//比较两个string是否相同 400eee:85 c0 test %eax,%eax 400ef0:74 05 je 400ef7 <phase_1+0x17> 400ef2:e8 43 05 00 00 callq 40143a <explode_bomb> 400ef7:48 83 c4 08 add $0x8,%rsp 400efb:c3 retq
使用gdb查看0x402400里面的内容即可。
Border relations with Canada have never been better.
phase2
0000000000400efc <phase_2>: 400efc:55 push %rbp 400efd:53 push %rbx 400efe:48 83 ec 28 sub $0x28,%rsp 400f02:48 89 e6 mov %rsp,%rsi 400f05:e8 52 05 00 00 callq 40145c <read_six_numbers>//从这个地方调用可以看出 输入是6个数字 400f0a:83 3c 24 01 cmpl $0x1,(%rsp)//这里(%rsp)是输入的第一个数 也就是第一个数必须是1 400f0e:74 20 je 400f30 <phase_2+0x34> 400f10:e8 25 05 00 00 callq 40143a <explode_bomb> 400f15:eb 19 jmp 400f30 <phase_2+0x34> 400f17:8b 43 fc mov -0x4(%rbx),%eax 400f1a:01 c0 add %eax,%eax 400f1c:39 03 cmp %eax,(%rbx)//判断是否等比 400f1e:74 05 je 400f25 <phase_2+0x29> 400f20:e8 15 05 00 00 callq 40143a <explode_bomb> 400f25:48 83 c3 04 add $0x4,%rbx 400f29:48 39 eb cmp %rbp,%rbx 400f2c:75 e9 jne 400f17 <phase_2+0x1b> 400f2e:eb 0c jmp 400f3c <phase_2+0x40> 400f30:48 8d 5c 24 04 lea 0x4(%rsp),%rbx//指针后移 移到第二个数字 400f35:48 8d 6c 24 18 lea 0x18(%rsp),%rbp//这个地方犯了个错 要注意0x18是十六进制的 刚开始看成了十进制18 这里指向最后一个数 400f3a:eb db jmp 400f17 <phase_2+0x1b> 400f3c:48 83 c4 28 add $0x28,%rsp 400f40:5b pop %rbx 400f41:5d pop %rbp 400f42:c3 retq
要求输入一个以1为首的长度为6 的等比数列。
1 2 4 8 16 32
phase 3
0000000000400f43 <phase_3>: 400f43:48 83 ec 18 sub $0x18,%rsp 400f47:48 8d 4c 24 0c lea 0xc(%rsp),%rcx 400f4c:48 8d 54 24 08 lea 0x8(%rsp),%rdx 400f51:be cf 25 40 00 mov $0x4025cf,%esi //查看0x4025cf 应该输入两个数字 %d %d 400f56:b8 00 00 00 00 mov $0x0,%eax 400f5b:e8 90 fc ff ff callq 400bf0 <__isoc99_sscanf@plt> 400f60:83 f8 01 cmp $0x1,%eax//是否大于1 400f63:7f 05 jg 400f6a <phase_3+0x27>//大于1跳转 400f65:e8 d0 04 00 00 callq 40143a <explode_bomb> 400f6a:83 7c 24 08 07 cmpl $0x7,0x8(%rsp)//小于7的话继续 判断输入的第一个数 400f6f:77 3c ja 400fad <phase_3+0x6a> 400f71:8b 44 24 08 mov 0x8(%rsp),%eax//eax存放输入的第一个数 400f75:ff 24 c5 70 24 40 00 jmpq *0x402470(,%rax,8)//典型的跳转指令 p/x *0x402470 得到$1 = 0x400f7c 即rax=1的时候跳转到该地址 400f7c:b8 cf 00 00 00 mov $0xcf,%eax // rax=1 400f81:eb 3b jmp 400fbe <phase_3+0x7b> 400f83:b8 c3 02 00 00 mov $0x2c3,%eax //rax=2 400f88:eb 34 jmp 400fbe <phase_3+0x7b> 400f8a:b8 00 01 00 00 mov $0x100,%eax //rax=3 400f8f:eb 2d jmp 400fbe <phase_3+0x7b> 400f91:b8 85 01 00 00 mov $0x185,%eax //rax=4 400f96:eb 26 jmp 400fbe <phase_3+0x7b> 400f98:b8 ce 00 00 00 mov $0xce,%eax //rax=5 400f9d:eb 1f jmp 400fbe <phase_3+0x7b> 400f9f:b8 aa 02 00 00 mov $0x2aa,%eax //rax=6 400fa4:eb 18 jmp 400fbe <phase_3+0x7b> 400fa6:b8 47 01 00 00 mov $0x147,%eax //rax=7 400fab:eb 11 jmp 400fbe <phase_3+0x7b>
400fad:e8 88 04 00 00 callq 40143a <explode_bomb> 400fb2:b8 00 00 00 00 mov $0x0,%eax 400fb7:eb 05 jmp 400fbe <phase_3+0x7b> 400fb9:b8 37 01 00 00 mov $0x137,%eax 400fbe:3b 44 24 0c cmp 0xc(%rsp),%eax //判断输入的第二个数字是否和eax中的数相等 400fc2:74 05 je 400fc9 <phase_3+0x86> 400fc4:e8 71 04 00 00 callq 40143a <explode_bomb> 400fc9:48 83 c4 18 add $0x18,%rsp 400fcd:c3 retq
输入其中的一个答案就可以了。
1 311
phase 4
0000000000400fce <func4>: //调用的函数func4 要求返回值为0 400fce:48 83 ec 08 sub $0x8,%rsp 400fd2:89 d0 mov %edx,%eax 400fd4:29 f0 sub %esi,%eax 400fd6:89 c1 mov %eax,%ecx 400fd8:c1 e9 1f shr $0x1f,%ecx 400fdb:01 c8 add %ecx,%eax 400fdd:d1 f8 sar %eax 400fdf:8d 0c 30 lea (%rax,%rsi,1),%ecx 400fe2:39 f9 cmp %edi,%ecx 400fe4:7e 0c jle 400ff2 <func4+0x24> 400fe6:8d 51 ff lea -0x1(%rcx),%edx 400fe9:e8 e0 ff ff ff callq 400fce <func4> 400fee:01 c0 add %eax,%eax 400ff0:eb 15 jmp 401007 <func4+0x39> 400ff2:b8 00 00 00 00 mov $0x0,%eax 400ff7:39 f9 cmp %edi,%ecx 400ff9:7d 0c jge 401007 <func4+0x39> 400ffb:8d 71 01 lea 0x1(%rcx),%esi 400ffe:e8 cb ff ff ff callq 400fce <func4> 401003:8d 44 00 01 lea 0x1(%rax,%rax,1),%eax 401007:48 83 c4 08 add $0x8,%rsp 40100b:c3 retq 000000000040100c <phase_4>: 40100c:48 83 ec 18 sub $0x18,%rsp 401010:48 8d 4c 24 0c lea 0xc(%rsp),%rcx 401015:48 8d 54 24 08 lea 0x8(%rsp),%rdx//两个输入分别存在0x8(%rsp) 0xc(%rsp) 40101a:be cf 25 40 00 mov $0x4025cf,%esi// x/s 0x4025cf 得到%d %d 说明应该输入两个数字 40101f:b8 00 00 00 00 mov $0x0,%eax 401024:e8 c7 fb ff ff callq 400bf0 <__isoc99_sscanf@plt> 401029:83 f8 02 cmp $0x2,%eax //检验是否输入为两个数字 40102c:75 07 jne 401035 <phase_4+0x29>//不然就爆炸 40102e:83 7c 24 08 0e cmpl $0xe,0x8(%rsp)//第1个数必须小于 0xe 401033:76 05 jbe 40103a <phase_4+0x2e>//小于的时候跳转 401035:e8 00 04 00 00 callq 40143a <explode_bomb>
40103a:ba 0e 00 00 00 mov $0xe,%edx//edx为14 40103f:be 00 00 00 00 mov $0x0,%esi//esi为0 401044:8b 7c 24 08 mov 0x8(%rsp),%edi//输入的第一个数放在edi里面 401048:e8 81 ff ff ff callq 400fce <func4>//调用函数func4 40104d:85 c0 test %eax,%eax//不为0 要求最后输出结果是0 40104f:75 07 jne 401058 <phase_4+0x4c> 401051:83 7c 24 0c 00 cmpl $0x0,0xc(%rsp) //第二个数字为0 401056:74 05 je 40105d <phase_4+0x51> 401058:e8 dd 03 00 00 callq 40143a <explode_bomb> 40105d:48 83 c4 18 add $0x18,%rsp 401061:c3 retq
func函数将主函数中的参数带入后 进行gdb调试可以发现第一次循环是比较输入的参数和7的大小 等于7 的时候既可以得到符合要求的返回值eax=0
当然带入0 1 3也是可以的。第二个数字一定为0就可以了。
phase 5
0000000000401062 <phase_5>: 401062:53 push %rbx 401063:48 83 ec 20 sub $0x20,%rsp 401067:48 89 fb mov %rdi,%rbx 40106a:64 48 8b 04 25 28 00 mov %fs:0x28,%rax 401071:00 00 401073:48 89 44 24 18 mov %rax,0x18(%rsp) 401078:31 c0 xor %eax,%eax 40107a:e8 9c 02 00 00 callq 40131b <string_length> 40107f:83 f8 06 cmp $0x6,%eax//输入一个六个字符长度的字符串 401082:74 4e je 4010d2 <phase_5+0x70> 401084:e8 b1 03 00 00 callq 40143a <explode_bomb> 401089:eb 47 jmp 4010d2 <phase_5+0x70> 40108b:0f b6 0c 03 movzbl (%rbx,%rax,1),%ecx//ecx=rbx+rax rax相当于计数变量i 40108f:88 0c 24 mov %cl,(%rsp)//cl是16位寄存器cx的低八位 401092:48 8b 14 24 mov (%rsp),%rdx// 401096:83 e2 0f and $0xf,%edx//只保留低四位 401099:0f b6 92 b0 24 40 00 movzbl 0x4024b0(%rdx),%edx//edx=0x4014b0+rdx0x4014b0是一大串字符串 rdx作为地址的偏移 使得每一个rdx对应一个字母 movzbl拷贝一个字节 其余用0填充 4010a0:88 54 04 10 mov %dl,0x10(%rsp,%rax,1) 4010a4:48 83 c0 01 add $0x1,%rax 4010a8:48 83 f8 06 cmp $0x6,%rax//循环6次 4010ac:75 dd jne 40108b <phase_5+0x29> 4010ae:c6 44 24 16 00 movb $0x0,0x16(%rsp)//rsp+22至零 4010b3:be 5e 24 40 00 mov $0x40245e,%esi//flyers所在地址 4010b8:48 8d 7c 24 10 lea 0x10(%rsp),%rdi//输入对应的字符串所在 4010bd:e8 76 02 00 00 callq 401338 <strings_not_equal> 4010c2:85 c0 test %eax,%eax//返回值要为0 4010c4:74 13 je 4010d9 <phase_5+0x77> 4010c6:e8 6f 03 00 00 callq 40143a <explode_bomb> 4010cb:0f 1f 44 00 00 nopl 0x0(%rax,%rax,1) 4010d0:eb 07 jmp 4010d9 <phase_5+0x77> 4010d2:b8 00 00 00 00 mov $0x0,%eax 4010d7:eb b2 jmp 40108b <phase_5+0x29> 4010d9:48 8b 44 24 18 mov 0x18(%rsp),%rax 4010de:64 48 33 04 25 28 00 xor %fs:0x28,%rax 4010e5:00 00 4010e7:74 05 je 4010ee <phase_5+0x8c> 4010e9:e8 42 fa ff ff callq 400b30 <__stack_chk_fail@plt> 4010ee:48 83 c4 20 add $0x20,%rsp 4010f2:5b pop %rbx 4010f3:c3 retq
选取合适的字符 只要低四位满足要求即可。IONEFG.
phase6
00000000004010f4 <phase_6>: 4010f4:41 56 push %r14 4010f6:41 55 push %r13 4010f8:41 54 push %r12 4010fa:55 push %rbp 4010fb:53 push %rbx 4010fc:48 83 ec 50 sub $0x50,%rsp 401100:49 89 e5 mov %rsp,%r13 401103:48 89 e6 mov %rsp,%rsi 401106:e8 51 03 00 00 callq 40145c <read_six_numbers>//读取六个数字 40110b:49 89 e6 mov %rsp,%r14 40110e:41 bc 00 00 00 00 mov $0x0,%r12d-开始循环--------------------------------------------------------------------- 401114:4c 89 ed mov %r13,%rbp 401117:41 8b 45 00 mov 0x0(%r13),%eax 依次放入第一个数 40111b:83 e8 01 sub $0x1,%eax//eax减一 40111e:83 f8 05 cmp $0x5,%eax//判断eax和5的大小 401121:76 05 jbe 401128 <phase_6+0x34>//小于等于时跳转 大于bomb 401123:e8 12 03 00 00 callq 40143a <explode_bomb>----------------------r13---------判断数值是否在1-6之间----------------------- 401128:41 83 c4 01 add $0x1,%r12d//r12d加一//r12d从0开始 40112c:41 83 fc 06 cmp $0x6,%r12d//判断r12d和6的大小 401130:74 21 je 401153 <phase_6+0x5f>//等于6时跳转 401132:44 89 e3 mov %r12d,%ebx//循环体 不等于6的时候 总共执行6次----------------------------------------------------------------------------- 401135:48 63 c3 movslq %ebx,%rax//作为符号扩展的4字节扩展到8字节 401138:8b 04 84 mov (%rsp,%rax,4),%eax//取后面一个数字 40113b:39 45 00 cmp %eax,0x0(%rbp)//不能相等 rbp指向第一个数 40113e:75 05 jne 401145 <phase_6+0x51> 401140:e8 f5 02 00 00 callq 40143a <explode_bomb>//相等的时候爆炸 数字不能重复 401145:83 c3 01 add $0x1,%ebx//i++ 401148:83 fb 05 cmp $0x5,%ebx//小于等于5的时候进行循环 40114b:7e e8 jle 401135 <phase_6+0x41>---------判断数字是否重复—将每一个数字都与当前数字进行大小比较---------------- 40114d:49 83 c5 04 add $0x4,%r13 // r13加4 //当前数字变为下一个 401151:eb c1 jmp 401114 <phase_6+0x20>//重复上面的循环----------------------------------------------------------------------------- 401153:48 8d 74 24 18 lea 0x18(%rsp),%rsi //第6个数字 401158:4c 89 f0 mov %r14,%rax//rax初始地址 40115b:b9 07 00 00 00 mov $0x7,%ecx 401160:89 ca mov %ecx,%edx 401162:2b 10 sub (%rax),%edx//7减去第一个数 401164:89 10 mov %edx,(%rax)//第一个数变为7-自己 401166:48 83 c0 04 add $0x4,%rax//指针加四 移到第二个数 40116a:48 39 f0 cmp %rsi,%rax//判断是否到第六个数 40116d:75 f1 jne 401160 <phase_6+0x6c>------------------------------把所有的数变成7-自己---------------------------- 40116f:be 00 00 00 00 mov $0x0,%esi 401174:eb 21 jmp 401197 <phase_6+0xa3> 401176:48 8b 52 08 mov 0x8(%rdx),%rdx 40117a:83 c0 01 add $0x1,%eax 40117d:39 c8 cmp %ecx,%eax//之道两者相等 40117f:75 f5 jne 401176 <phase_6+0x82> 401181:eb 05 jmp 401188 <phase_6+0x94> 401183:ba d0 32 60 00 mov $0x6032d0,%edx 401188:48 89 54 74 20 mov %rdx,0x20(%rsp,%rsi,2)// 40118d:48 83 c6 04 add $0x4,%rsi 401191:48 83 fe 18 cmp $0x18,%rsi 401195:74 14 je 4011ab <phase_6+0xb7>//全部小于等于1 401197:8b 0c 34 mov (%rsp,%rsi,1),%ecx //依次取出数字 40119a:83 f9 01 cmp $0x1,%ecx 40119d:7e e4 jle 401183 <phase_6+0x8f>//小于等于1才跳转 40119f:b8 01 00 00 00 mov $0x1,%eax//到这一步说明不是全部小于等于1 4011a4:ba d0 32 60 00 mov $0x6032d0,%edx//使用gdb发现 这个地址存储着一个链表的首元素 4011a9:eb cb jmp 401176 <phase_6+0x82>-------------- -----建立链表----------------------------------- 4011ab:48 8b 5c 24 20 mov 0x20(%rsp),%rbx 4011b0:48 8d 44 24 28 lea 0x28(%rsp),%rax 4011b5:48 8d 74 24 50 lea 0x50(%rsp),%rsi 4011ba:48 89 d9 mov %rbx,%rcx// 4011bd:48 8b 10 mov (%rax),%rdx 4011c0:48 89 51 08 mov %rdx,0x8(%rcx)//后一个的地址放到前一个里面 链表的储存 4011c4:48 83 c0 08 add $0x8,%rax 4011c8:48 39 f0 cmp %rsi,%rax 4011cb:74 05 je 4011d2 <phase_6+0xde>//循环直到rsirax相等 4011cd:48 89 d1 mov %rdx,%rcx 4011d0:eb eb jmp 4011bd <phase_6+0xc9>//当rsi rax相等 4011d2:48 c7 42 08 00 00 00 movq $0x0,0x8(%rdx)//最后一个指针为null 4011d9:00 4011da:bd 05 00 00 00 mov $0x5,%ebp 4011df:48 8b 43 08 mov 0x8(%rbx),%rax 4011e3:8b 00 mov (%rax),%eax 4011e5:39 03 cmp %eax,(%rbx)//判断前一项是否大于后一项 4011e7:7d 05 jge 4011ee <phase_6+0xfa>//rbx的值要大于eax 4011e9:e8 4c 02 00 00 callq 40143a <explode_bomb>//不递增就爆炸 4011ee:48 8b 5b 08 mov 0x8(%rbx),%rbx 4011f2:83 ed 01 sub $0x1,%ebp//ebp是一个counter 4011f5:75 e8 jne 4011df <phase_6+0xeb> 4011f7:48 83 c4 50 add $0x50,%rsp 4011fb:5b pop %rbx 4011fc:5d pop %rbp 4011fd:41 5c pop %r12 4011ff:41 5d pop %r13 401201:41 5e pop %r14 401203:c3 retq
可以查看到6032d0这个链表的内容
要让 332 168 924 691 477 443 递增排序
那么顺序应该是 3 4 5 6 1 2
因为做过7-x的变换 所以答案是 4 3 2 1 6 5
下图用来提醒自己内存储存的顺序
secret phase
在每一关的phase完成之后 main函数都会先调用这个phase——defused函数 在进行下一个phase
00000000004015c4 <phase_defused>: 4015c4:48 83 ec 78 sub $0x78,%rsp 4015c8:64 48 8b 04 25 28 00 mov %fs:0x28,%rax 4015cf:00 00 4015d1:48 89 44 24 68 mov %rax,0x68(%rsp) 4015d6:31 c0 xor %eax,%eax 4015d8:83 3d 81 21 20 00 06 cmpl $0x6,0x202181(%rip) # 603760 <num_input_strings>//是否已经完成前面六关 4015df:75 5e jne 40163f <phase_defused+0x7b> 4015e1:4c 8d 44 24 10 lea 0x10(%rsp),%r8 4015e6:48 8d 4c 24 0c lea 0xc(%rsp),%rcx 4015eb:48 8d 54 24 08 lea 0x8(%rsp),%rdx 4015f0:be 19 26 40 00 mov $0x402619,%esi// %d %d %s 4015f5:bf 70 38 60 00 mov $0x603870,%edi 4015fa:e8 f1 f5 ff ff callq 400bf0 <__isoc99_sscanf@plt> 4015ff: 83 f8 03 cmp $0x3,%eax//输入是否是三个参数 401602:75 31 jne 401635 <phase_defused+0x71> 401604:be 22 26 40 00 mov $0x402622,%esi//DrEvil 401609:48 8d 7c 24 10 lea 0x10(%rsp),%rdi//第三个参数是否是DrEvil 40160e:e8 25 fd ff ff callq 401338 <strings_not_equal>401613:85 c0 test %eax,%eax 401615:75 1e jne 401635 <phase_defused+0x71> 401617:bf f8 24 40 00 mov $0x4024f8,%edi 40161c:e8 ef f4 ff ff callq 400b10 <puts@plt> 401621:bf 20 25 40 00 mov $0x402520,%edi 401626:e8 e5 f4 ff ff callq 400b10 <puts@plt>//输出两句话 这个地方我是设置断点进入的 40162b:b8 00 00 00 00 mov $0x0,%eax 401630:e8 0d fc ff ff callq 401242 <secret_phase>//跳转到彩蛋 401635:bf 58 25 40 00 mov $0x402558,%edi 40163a:e8 d1 f4 ff ff callq 400b10 <puts@plt> 40163f:48 8b 44 24 68 mov 0x68(%rsp),%rax 401644:64 48 33 04 25 28 00 xor %fs:0x28,%rax 40164b:00 00 40164d:74 05 je 401654 <phase_defused+0x90> 40164f:e8 dc f4 ff ff callq 400b30 <__stack_chk_fail@plt> 401654:48 83 c4 78 add $0x78,%rsp 401658:c3 retq 401659:90 nop 40165a:90 nop 40165b:90 nop 40165c:90 nop 40165d:90 nop 40165e:90 nop 40165f:90 nop
0000000000401204 <fun7>: 401204:48 83 ec 08 sub $0x8,%rsp 401208:48 85 ff test %rdi,%rdi 40120b:74 2b je 401238 <fun7+0x34>//输入为0的时候跳转爆炸 40120d:8b 17 mov (%rdi),%edx//美元符号 36 40120f:39 f2 cmp %esi,%edx 401211:7e 0d jle 401220 <fun7+0x1c> 401213:48 8b 7f 08 mov 0x8(%rdi),%rdi// 输入值小于36 \b 退格 401217:e8 e8 ff ff ff callq 401204 <fun7>//递归 40121c:01 c0 add %eax,%eax//eax*2 要得到2 eax就要为1 40121e:eb 1d jmp 40123d <fun7+0x39> 401220:b8 00 00 00 00 mov $0x0,%eax//输入值大于36 401225:39 f2 cmp %esi,%edx 401227:74 14 je 40123d <fun7+0x39>//相等的时候 eax 401229:48 8b 7f 10 mov 0x10(%rdi),%rdi 40122d:e8 d2 ff ff ff callq 401204 <fun7> 401232:8d 44 00 01 lea 0x1(%rax,%rax,1),%eax 401236:eb 05 jmp 40123d <fun7+0x39> 401238:b8 ff ff ff ff mov $0xffffffff,%eax 40123d:48 83 c4 08 add $0x8,%rsp 401241:c3 retq 0000000000401242 <secret_phase>: 401242:53 push %rbx 401243:e8 56 02 00 00 callq 40149e <read_line>//输入 401248:ba 0a 00 00 00 mov $0xa,%edx 40124d:be 00 00 00 00 mov $0x0,%esi 401252:48 89 c7 mov %rax,%rdi 401255:e8 76 f9 ff ff callq 400bd0 <strtol@plt> 40125a:48 89 c3 mov %rax,%rbx//这里有一个参数rax=rbx 40125d:8d 40 ff lea -0x1(%rax),%eax//test 输入47 401260:3d e8 03 00 00 cmp $0x3e8,%eax 401265:76 05 jbe 40126c <secret_phase+0x2a> 401267:e8 ce 01 00 00 callq 40143a <explode_bomb> 40126c:89 de mov %ebx,%esi//输入的参数 40126e:bf f0 30 60 00 mov $0x6030f0,%edi 401273:e8 8c ff ff ff callq 401204 <fun7>//调用函数fun7 401278:83 f8 02 cmp $0x2,%eax //返回值要等于2 40127b:74 05 je 401282 <secret_phase+0x40> 40127d:e8 b8 01 00 00 callq 40143a <explode_bomb> 401282:bf 38 24 40 00 mov $0x402438,%edi 401287:e8 84 f8 ff ff callq 400b10 <puts@plt> 40128c:e8 33 03 00 00 callq 4015c4 <phase_defused> 401291:5b pop %rbx 401292:c3 retq 401293:90 nop 401294:90 nop 401295:90 nop 401296:90 nop 401297:90 nop 401298:90 nop 401299:90 nop 40129a:90 nop 40129b:90 nop 40129c:90 nop 40129d:90 nop 40129e:90 nop 40129f:90 nop
0 0
- 213 lab2 bomb
- csapp lab2 bomb
- csapp bomb lab:csapp lab2 炸弹实验
- CSAPP Lab2--Defusing a Binary Bomb
- <csapp> bomb lab (《深入理解计算机系统》lab2)
- csapp lab2 bomb 二进制炸弹《深入理解计算机系统》
- CSAPP lab2 bomb(深入了解计算机系统 实验二)
- lab2
- Lab2
- Lab2
- Bomb
- Bomb
- Bomb
- Bomb
- Bomb
- bomb
- Bomb
- Bomb
- 指南针开发(备忘)
- vim中读写特殊字符&回车和换行的区别
- LeetCode 19. Remove Nth Node From End of List
- document.ready和onload的区别——JavaScript文档加载完成事件
- Android运行时ART加载OAT文件的过程分析
- 213 lab2 bomb
- java设计模式,观察者模式
- Button上的文字自动变成大写的解决办法
- #368 –在Calendar 控件中指定不可选择日期(Specifying Blackout Dates in a Calendar Control)
- Java核心技术点之多线程
- jquery中使用ajax传递数组到webservice
- Java设计模式之单例模式及在Android中的重要使用
- Objective-c mvc的斯坦福大学课程的总结
- 【CodeChef】LCH15JGH Many bananas