- 论坛徽章:
- 0
|
我知道这"牛人"心里想的什么无力吐槽
OwnWaterloo 发表于 2011-10-28 14:03 ![]()
看起来函数内部“故意压栈”的
575: int max(int a, int b)
576: {
0x00000CEA B503 PUSH {r0-r1,lr} ; 传参数直接用r0,r1,但是传进来之后压栈了
577: return (&a)[((a-b) & (INT_MAX^UINT_MAX)) >> (sizeof(int)*CHAR_BIT-1)];
0x00000CEC 9800 LDR r0,[sp,#0x00] ; 取a
0x00000CEE 1A40 SUBS r0,r0,r1 ; r0=a-b
0x00000CF0 0FC0 LSRS r0,r0,#31 ; >>操作
0x00000CF2 0080 LSLS r0,r0,#2 ; &操作
0x00000CF4 4669 MOV r1,sp ; r1=&a
0x00000CF6 5808 LDR r0,[r1,r0] ; r0=(&a)[...]的值
0x00000CF8 BD0C POP {r2-r3,pc} ; 返回,它好像不关心r1-r3被修改掉
578: } |
|