使用DevEco Studio编译出的so文件如何隐藏符号以及如何启用堆栈保护
使用DevEco Studio编译出的so文件如何隐藏符号以及如何启用堆栈保护
请问编译so时如何隐藏符号,在AndroidStudio中是通过-fvisibility=hidden选项隐藏符号的 另外对应的 这几个选项要如何设置,有人知道吗?
-fvisibility=hidden -O3 -fstack-protector-all
cmake如下:
cmake_minimum_required(VERSION 3.4.1)
project(HarmonyNativeUtil)
set(CMAKE_BUILD_TYPE "Release")
# -fvisibility=hidden:
该选项告诉编译器隐藏所有符号,除非它们被显式导出。
# 提高安全性:隐藏符号可以使攻击者更难以找到和利用代码中的漏洞;减少代码大小:隐藏符号可以减少代码大小,因为编译器不需要为未使用的符号生成代码。
# -O3:
该选项启用最高级别的优化,这些优化可以提高代码性能,但可能会导致代码大小增加。
# -fstack-protector-all:
启用堆栈保护,它是GCC和Clang编译器的一个选项,它可以帮助防止堆栈溢出攻击。它通过在堆栈中插入一些额外的信息来实现,这些信息可以用来检测和阻止攻击。
# -fstack-protector-all可能会导致编译错误或警告。如果您遇到这些问题,请尝试将-fstack-protector-all选项设置为-fstack-protector。
-fstack-protector-all可能会降低性能。
set(CommonFlags "-fvisibility=hidden -O3 -fstack-protector-all")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CommonFlags}")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CommonFlags}")
message("构建类型:${CMAKE_BUILD_TYPE}")
message("CMAKE_C_FLAGS参数:${CMAKE_C_FLAGS}")
message("CMAKE_CXX_FLAGS参数:${CMAKE_CXX_FLAGS}")
message("工程源目录:${PROJECT_SOURCE_DIR}")
message("当前CMake路径:${CMAKE_SOURCE_DIR}")
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${NATIVERENDER_ROOT_PATH} ${NATIVERENDER_ROOT_PATH}/include)
4 回复
so文件隐藏符号操作如下:
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_C_VISIBILITY_PRESET hidden)
set(CMAKE_SHARED_LIBRARY_VISIBILITY_PRESET hidden)
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")
在build-profile.json5文件 arguments
项中添加如下参数。
{
"buildOption": {
"externalNativeOptions": {
"arguments": "-DCMAKE_BUILD_TYPE=Release"
}
}
}
试试
这个应该只是CMake的配置问题,回答隐藏符号问题:
CMake配置
# 隐藏c++导出符号,如果是c函数换成CMAKE_C_VISIBILITY_PRESET
set(CMAKE_CXX_VISIBILITY_PRESET hidden)
set(CMAKE_VISIBILITY_INLINES_HIDDEN 1)
其他配置可以查下CMake的配置文档
在DevEco Studio中编译出的so文件隐藏符号可以通过修改编译选项实现。在build.gradle
文件中,添加-fvisibility=hidden
到cppFlags
中,示例如下:
externalNativeBuild {
cmake {
cppFlags "-fvisibility=hidden"
}
}
启用堆栈保护可以通过在CMakeLists.txt
中添加-fstack-protector-strong
编译选项实现,示例如下:
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fstack-protector-strong")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fstack-protector-strong")
这些操作会在编译过程中隐藏符号并启用堆栈保护。
在DevEco Studio中隐藏.so文件的符号,可以在build.gradle
中配置CMake
,添加-fvisibility=hidden
编译选项,隐藏不必要的符号。启用堆栈保护,可以在CMakeLists.txt
中添加-fstack-protector-strong
编译选项,增强堆栈保护。具体配置如下:
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -fstack-protector-strong")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -fstack-protector-strong")
这样可以有效隐藏符号并启用堆栈保护。