阅读大会炸弹

时间:2015-09-03 00:51:59

标签: assembly x86-64 disassembly

我无法理解这两行代码。这来自二元炸弹实验室

# regs
rbx            0x0  0
rbp            0x7fffffffe910 <--points to a seq of 1 2 3 4 5 6  

# code
add    0x0(%rbp,%rbx,4),%eax
cmp    %eax,0x4(%rbp,%rbx,4)

我认为这只是2 + 0 * 4。我应该在第二个号码,因为我跳了第一个炸弹,但我不完全确定。

1 个答案:

答案 0 :(得分:1)

你没有提供eax的内容。注意整数溢出。

您也没有告诉我们rbp是否指向一系列增加的字节,32位字节或什么。 (我假设你的意思是当你说&#34;包含&#34;时,因为它看起来像是指向堆栈内存的指针而代码将它用作指针。)

由于rbx为零,因此它等同于:

add    (%rbp),%eax             # eax += *rbp
cmp    %eax,0x4(%rbp)          # set flags from *(rbp+4) - eax.  (+4B = one 32bit integer)
#  e.g. jl will branch if *(rbp+4) < eax