xamarin - 在 Xamarin.Forms 中使用基于堆栈的缓冲区溢出保护进行编译
问题描述
Android和iOS应用程序的问题之一是缓冲区溢出保护。根据安全指南,移动应用程序需要在编译时启用基于堆栈的缓冲区溢出保护 ( -fstack-protector-all
)。是否需要在Xamarin.Forms中启用此标志?如果是,如何使用该标志编译应用程序。
解决方案
Xamarin.Forms 与堆栈检查/金丝雀无关,它是由 Xamarin.iOS (ie Mono.framework/Mono
) 和 Xamarin.Android (ie libmono-android.release.so
) 提供的 Mono 运行时 (以及捆绑的支持框架和共享库) 预编译堆栈检查/金丝雀,加上捆绑在应用程序中的任何第 3 方本机库和用户提供的本机库。
例子:
Mono.framework/单声道
otool -Iv MonoTouch.iphoneos.sdk/Frameworks/Mono.framework/Mono | grep stack_chk
0x0014d508 33044 ___stack_chk_fail
0x001e4444 33045 ___stack_chk_guard
0x001e44d4 33044 ___stack_chk_fail
0x0014d554 33042 ___stack_chk_fail
0x001e4444 33043 ___stack_chk_guard
0x001e44cc 33042 ___stack_chk_fail
~~~
arm64-v8a/libmono-android.release.so
objdump -dj .text ./Xamarin/Android/lib/arm64-v8a/libmono-android.release.so | grep stack_chk
9130: 97fffd9c bl 87a0 <__stack_chk_fail@plt>
9254: 97fffd53 bl 87a0 <__stack_chk_fail@plt>
98a0: 97fffbc0 bl 87a0 <__stack_chk_fail@plt>
9a90: 97fffb44 bl 87a0 <__stack_chk_fail@plt>
9cb0: 97fffabc bl 87a0 <__stack_chk_fail@plt>
~~~
注意:这些只是示例输出,您可以检查应用程序中所有捆绑的原生框架/共享库...
推荐阅读
- node.js - Nodejs Websocket 速度
- python - 流光图像循环
- wireshark - 如何重放 Wireshark 捕获的数据包?
- javascript - node-postgres 传递自定义类型的数组
- node.js - 如何在对话流中使用用户会话?
- reactjs - 缺少必需参数:Spotify 克隆中的 redirect_uri
- r - 如何在R中将字符更改为数字向量
- django - 将项目放在 django 模板的顶部进行循环
- python - 使用 GeoDataFrames - 查找多边形的区域
- python - Webscraping:列表内的字典问题,带有重复数据的json