【发布时间】:2018-03-20 04:38:32
【问题描述】:
我从一个网站上看到了这个案例:
cmpl $0x0,-0x20(%ebp)
jne xxx (program terminated so -0x20(%ebp) == 0)
cmpl $0x1,-0x1c(%ebp)
jne xxx (program terminated so -0x1c(%ebp) == $1)
然后:
lea -0x18(%ebp),%ebx
mov -0x4(%ebx),%eax
网站说 %eax = -0x4(%ebx) = -1c(%ebp) == $0
所以我不知道为什么 -0x4(-0x18(%ebp)) 将等于 -1c(%ebp) 请帮忙,谢谢!
【问题讨论】:
-
0x18 + 0x4 = 0x1c。 (十进制,24+4 = 28)。这就是你要问的全部吗?
-
听起来该网站试图传达您可以从存储在寄存器 ebx 和 ebp 中的两个不同基址读取相同的内存位置,但谁知道您没有提供足够的信息。
-
它真的说 -1c(%ebp) 是 0,还是一个错字?因为在代码第 4 行的注释中,它说它是 1。
-
@Rafael
ebx是从ebpbase -0x18 由lea加载的,我认为提供的信息就足够了。这是错误的([ebx-4] 引用的结果值是 1,而不是 0)。
标签: assembly memory x86 hex att