首页 > 解决方案 > 在 Xamarin.Forms 中使用基于堆栈的缓冲区溢出保护进行编译

问题描述

AndroidiOS应用程序的问题之一是缓冲区溢出保护。根据安全指南,移动应用程序需要在编译时启用基于堆栈的缓冲区溢出保护 ( -fstack-protector-all)。是否需要在Xamarin.Forms中启用此标志?如果是,如何使用该标志编译应用程序。

标签: xamarinxamarin.formsxamarin.androidxamarin.ios

解决方案


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>
~~~

注意:这些只是示例输出,您可以检查应用程序中所有捆绑的原生框架/共享库...


推荐阅读