能力值:
( LV7,RANK:110 )
|
-
-
2 楼
子函数申请的空间 局部变量会在里面
|
能力值:
( LV3,RANK:20 )
|
-
-
3 楼
啊,我也想到了,但是这个申请与释放是在子函数内部进行的吧?为什么我调用这种需要申请空间的函数就会挂掉,调用不需要申请空间的函数就没问题?
|
能力值:
( LV4,RANK:40 )
|
-
-
4 楼
需要申请的函数?啥意思?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
因为你调用的时候没有申请空间。。 这种是变量。 也就是先push push push 再call 。。。 你没有压栈。
|
能力值:
( LV5,RANK:66 )
|
-
-
6 楼
别误人子弟啊,这个是ARM指令,第一个语句和第二个语句是干啥的,明显申请了空间。
|
能力值:
( LV5,RANK:66 )
|
-
-
7 楼
push push push 再call 的,push进去的是参数,也不是变量。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
对你的子函数来说是参数。 对执行push 的原函数来说就是 变量了。 所以需要调用 者去申请。
不信你自己去写个代码IDA看看。ARM又如何。在调用上又没区别。
|
能力值:
( LV5,RANK:66 )
|
-
-
9 楼
我push寄存器值又怎么算变量?而且,这个函数明显没有参数,call之前何来push?
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
你如何看出来没有参数的? 子函数最开始的一行push 那是保存栈现场。 类似于x86 的栈桢。
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
是编译器为局部变量分配的空间
|
能力值:
( LV5,RANK:66 )
|
-
-
12 楼
IDA告诉我只有一堆变量,没有参数。有变量就会申请栈空间,申请栈空间就需要保存栈基址,你还是再多用用IDA吧。
|
能力值:
(RANK:350 )
|
-
-
13 楼
第一行的PUSH指令只是想说,这几个寄存器我要当临时使用到它们,需要在使用前保存原先的值。
Android上ARM的调用是前4个参数使用R0-R3寄存器,超过4个参数才用栈来传递。
最简单判断有无参数的方法就是看有没有使用R0及以上的寄存器值的引用的指令,如下面的指令:
PUSH XXX
SUB SP, SP, XXX
...
MOVS R4,R0
MOVS R5,R1
BL SUB_XXX
MOVS R0,R4
MOVS R1,R5
...
对于这样的函数,说明至少有2个参数!
就是说,IDA分析出的栈变量列表中如果没有arg_xxx,表示可能有使用参数,也可能没有,但如果有arg_xxx,说明此函数使用的参数至少有4个以上!
|
|
|