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 中有啥作用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

src 或 destination 中两个值的汇编语言含义

使用gdb查看栈帧的情况, 没有ebp

请问这段反汇编每句的含义,谢谢

pwnable.tw applestore

(如果 BYTE PTR [ebp+0x8] 得到一个大于 1 字节的参数会怎样?比如 0xcdc485c1

学习汇编语言