gpt4 book ai didi

ios - 在 ARM 组件中使用堆栈指针(sp)

转载 作者:行者123 更新时间:2023-12-01 18:32:38 25 4
gpt4 key购买 nike

我对以下拆卸感到有些困惑:

_GSEventLockDevice:
000047d8 b5f0 push {r4, r5, r6, r7, lr}
000047da af03 add r7, sp, #12
000047dc b08d sub sp, #52
000047de f7ffffb3 bl _GSGetPurpleSystemEventPort
000047e2 466d mov r5, sp
000047e4 2234 movs r2, #52
000047e6 2100 movs r1, #0
000047e8 4604 mov r4, r0
000047ea 4628 mov r0, r5
000047ec f005e8b0 blx 0x9950 @ symbol stub for: _memset
000047f0 2600 movs r6, #0
000047f2 f24030f6 movw r0, 0x3f6
000047f6 4621 mov r1, r4
000047f8 e88d0041 stmia.w sp, {r0, r6}
000047fc 4628 mov r0, r5
000047fe f7fffaf7 bl _GSSendEvent
00004802 b00d add sp, #52
00004804 bdf0 pop {r4, r5, r6, r7, pc}
00004806 bf00 nop

我不知道这在C中会如何。我得到的唯一一点是:
memset(whateverTheStackPointerIs, 0, 52);

但是我怎么知道什么是sp以及它在C语言中的外观如何?

最佳答案


sub sp, #52

为堆栈上的局部变量保留52个字节的空间;之后 sp将指向这52个字节中的第一个。然后通过memset调用将它们全部归零。在内存集之后, stmia在前两个单词中存储特定值。因此,C等价物类似于
GEEventLockDecvice() {
int tmp = GSGetPurpleSystemEventPort();
int localdata[13] = {0};
localdata[0] = *0x3f6;
localdata[1] = 0;
return GSSendEvent(&localdata, tmp);
}

关于ios - 在 ARM 组件中使用堆栈指针(sp),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7058047/

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