我无法理解这两行代码。这来自二元炸弹实验室
# 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
。我应该在第二个号码,因为我跳了第一个炸弹,但我不完全确定。
答案 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