int
level
=
4
;
u_long lr0,lr1,lr2,lr3,lr4;
[&]()
-
>void {
/
/
调用这个 registerLR 本身也会触发一次函数调用 会有一个lr,故从
1
开始
switch (level) {
case
1
:
lr0
=
reinterpret_cast<u_long>(__builtin_return_address(
1
));
LOGD(
"LR -> %p"
,(void
*
)(lr0
-
soAddr));
break
;
case
2
:
lr1
=
reinterpret_cast<u_long>(__builtin_return_address(
1
));
lr0
=
reinterpret_cast<u_long>(__builtin_return_address(
2
));
LOGD(
"LR -> %p %p"
,(void
*
)(lr0
-
soAddr),(void
*
)(lr1
-
soAddr));
break
;
case
3
:
lr2
=
reinterpret_cast<u_long>(__builtin_return_address(
1
));
lr1
=
reinterpret_cast<u_long>(__builtin_return_address(
2
));
lr0
=
reinterpret_cast<u_long>(__builtin_return_address(
3
));
LOGD(
"LR -> %p %p %p"
,(void
*
)(lr0
-
soAddr),(void
*
)(lr1
-
soAddr),(void
*
)(lr2
-
soAddr));
break
;
case
4
:
lr3
=
reinterpret_cast<u_long>(__builtin_return_address(
1
));
lr2
=
reinterpret_cast<u_long>(__builtin_return_address(
2
));
lr1
=
reinterpret_cast<u_long>(__builtin_return_address(
3
));
lr0
=
reinterpret_cast<u_long>(__builtin_return_address(
4
));
LOGD(
"LR -> %p %p %p %p"
,(void
*
)(lr0
-
soAddr),(void
*
)(lr1
-
soAddr),(void
*
)(lr2
-
soAddr),(void
*
)(lr3
-
soAddr));
break
;
case
5
:
lr4
=
reinterpret_cast<u_long>(__builtin_return_address(
1
));
lr3
=
reinterpret_cast<u_long>(__builtin_return_address(
2
));
lr2
=
reinterpret_cast<u_long>(__builtin_return_address(
3
));
lr1
=
reinterpret_cast<u_long>(__builtin_return_address(
4
));
lr0
=
reinterpret_cast<u_long>(__builtin_return_address(
5
));
LOGD(
"LR -> %p %p %p %p %p"
,(void
*
)(lr0
-
soAddr),(void
*
)(lr1
-
soAddr),(void
*
)(lr2
-
soAddr),(void
*
)(lr3
-
soAddr),(void
*
)(lr4
-
soAddr));
break
;
}
}();