计算机系统基础二进制炸弹,二进制炸弹阶段2

如果这个汇编代码将打印1,2,6,24,120,720作为六个数字,我感到非常困惑。我试图在GDB中多次尝试,并且我看到eax值从1,2,3和6起波动,然后由于某种原因,它不会循环两次以上。我真的坚持这一点,任何帮助,将不胜感激。这与其他二元弹阶段2的帖子无关,因为这个不同。二进制炸弹阶段2

0x000000000040129f : push %rbp

0x00000000004012a0 : push %rbx

0x00000000004012a1 : sub $0x28,%rsp

0x00000000004012a5 : mov %rsp,%rsi

0x00000000004012a8 : callq 0x40185a

0x00000000004012ad : cmpl $0x1,(%rsp)

0x00000000004012b1 : je 0x4012be

0x00000000004012b3 : mov $0x0,%eax

0x00000000004012b8 : callq *0x2034e2(%rip) #

0x00000000004012be : mov %rsp,%rbx

0x00000000004012c1 : mov $0x1,%ebp

0x00000000004012c6 : mov (%rbx),%eax

0x00000000004012c8 : lea (%rax,%rax,2),%eax

0x00000000004012cb : mov %eax,%edx

0x00000000004012cd : xor 0x4(%rbx),%edx

0x00000000004012d0 : mov %ebp,%ecx

0x00000000004012d2 : sar %cl,%eax

0x00000000004012d4 : cmp %eax,%edx

0x00000000004012d6 : je 0x4012e3

0x00000000004012d8 : mov $0x0,%eax

0x00000000004012dd : callq *0x2034bd(%rip)

0x00000000004012e3 : add $0x1,%ebp

0x00000000004012e6 : add $0x4,%rbx

0x00000000004012ea : cmp $0x6,%ebp

0x00000000004012ed : jne 0x4012c6

0x00000000004012ef : add $0x28,%rsp

0x00000000004012f3 : pop %rbx

0x00000000004012f4 : pop %rbp

0x00000000004012f5 : retq

这是我在我的第二次迭代寄存器中得到的。现在不会有另一个迭代,因为rax和rdx不相等,所以不会执行最后的跳转。这让我感到困惑,因为我认为它应该能够循环回来直到出现6个数字。

rax 0x1 1

rbx 0x7fffffffe1f4 140737488347636

rcx 0x2 2

rdx 0x5 5

rsi 0x402e7d 4206205

rdi 0x7fffffffdb21 140737488345889

rbp 0x2 0x2

rsp 0x7fffffffe1f0 0x7fffffffe1f0

r8 0x3e9258ee40 268743274048

r9 0x100 256

r10 0xb 11

r11 0xb 11

r12 0x400e30 4197936

r13 0x7fffffffe320 140737488347936

r14 0x0 0

r15 0x0 0

rip 0x4012d8 0x4012d8

eflags 0x202 [ IF ]

cs 0x33 51

ss 0x2b 43

ds 0x0 0

es 0x0 0

fs 0x0 0

+0

'read_six_numbers'返回什么?该功能如何工作?这是你已经知道的一件事吗?紧接着的指令是将堆栈顶部的值与1进行比较。如果该值不是* 1,则跳转到“+ 31”。你应该能够从那里一行一行地追踪代码。 –

+0

[理解炸弹实验室]可能的副本(https://stackoverflow.com/questions/26435018/understanding-bomb-lab) –

+0

@Bo persson它不是一回事。 Cody什么意思是什么read_six_numbers返回?它只是要求六个数字,第一个必须是1,然后如果是,那么它跳到31。问题是,当我试图在第二次迭代中追踪它时,它不会满足最后跳跃的条件,并且最终会在gdb中发生爆炸。 –

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值