cmpl $0x1, -0x18(ebp) 在 AT&T 中有啥作用? [复制]
Posted
技术标签:
【中文标题】cmpl $0x1, -0x18(ebp) 在 AT&T 中有啥作用? [复制]【英文标题】:What cmpl $0x1, -0x18(ebp) does in AT&T? [duplicate]cmpl $0x1, -0x18(ebp) 在 AT&T 中有什么作用? [复制] 【发布时间】:2020-09-11 17:19:25 【问题描述】:所以我有一行可以进行逻辑比较,例如:
cmpl $0x1, -0x18(ebp)
。在这之后,如果它相等,它就会跳转,但是 -0x18(ebp) 究竟是做什么的?
【问题讨论】:
(ebp) 表示ebp中存储的地址处的项目。 -0x18 是一个偏移量,所以如果 ebp 有 0x1000 那么这意味着在地址 0x1000-0x18 处读取值 AT&T 与此无关。 【参考方案1】:让我们稍微分解一下。
-0x18(ebp)
取存储在ebp
寄存器中的值,从中减去0x18
,并将结果用作要读取的内存地址。
因此,cmpl $0x1, -0x18(ebp)
读取存储在从-0x18(ebp)
计算的内存地址中的值并从中减去$0x1
,根据该计算设置各种标志(例如,将零标志ZF
设置为1
,如果减法结果为0
)。然后各种jmp
指令根据设置的标志确定是否跳转。
【讨论】:
以上是关于cmpl $0x1, -0x18(ebp) 在 AT&T 中有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章