gpt4 book ai didi

arm - ARM 中的 PUSH 和 POP 命令

转载 作者:行者123 更新时间:2023-12-01 12:17:29 27 4
gpt4 key购买 nike

我试图了解 ARM 程序集中函数的开始和结束:

PUSH {R0-R2, LR}
POP {R0-R2, PC}

看看 IDA 中的这段代码,这是我的理解(假设 SP 是 0x100):
PUSH R0 ; sp = 0xFC
PUSH R1 ; sp = 0xF8
PUSH R2 ; sp = 0xF4
PUSH LR ; sp = 0xF0
POP R0 ; sp = 0xF4
POP R1 ; sp = 0xF8
POP R2 ; sp = 0xFC
POP PC ; sp = 0x100

看起来 PC 获得了 R0 的值,而它应该获得 LR 的值。
PC不应该得到LR的值吗?

最佳答案

当您 PUSH 或 POP 一堆寄存器时,无论方向如何,它们总是以相同的相对位置进入内存。最低编号的寄存器存储在最低地址并从最低地址加载。所以在这个例子中,除了 LR->PC 之外,一切都将返回到原始寄存器。

换句话说,将 PUSH 想象成存储 {LR,R2,R1,R0}。

请参阅您最喜欢的 Arm 32 位处理器系列的用户指南/指令集引用; LDM 和 STM。

关于arm - ARM 中的 PUSH 和 POP 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47109767/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com