Readelf 报告程序是共享库而不是可执行文件

2024-04-30

使用独立的 Android NDK r10e 工具链(使用 --toolchain=x86-clang3.6 开关构建)出现这种奇怪的行为。交叉编译的环境变量已设置在运行makefile之前,SYSROOT指向Android工具链位置,CXX等于i686-linux-android-clang++。基本上,我有一堆 cpp 文件,我想将它们编译为 Android 可执行文件。遗憾的是,clang++ 不断生成 .so 共享库(用 readelf 检查 - 它确实是共享对象)。是否有我忘记的编译器/链接器的特殊开关?

Makefile:(main.cpp包含main函数)

CFLAGS=-c -Wall -std=c++11 -Wextra --sysroot=${SYSROOT} -march=i686
LDFLAGS=-lc -lc++_shared -L${SYSROOT}/usr/lib
SOURCES=main.cpp File1.cpp File2.cpp File3.cpp File4.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=test

all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS) ${CXX} $(LDFLAGS) $(OBJECTS) -o $@
.cpp.o: ${CXX} $(CFLAGS) $< -o $@
clean: rm *.o test

clang++ 不断生成 .so 共享库(使用 readelf 检查 - 它确实是共享对象)。是否有我忘记的编译器/链接器的特殊开关?

My guess: readelf正在输出Elf file type is DYN (shared object file),您将其解释为共享对象:)

你可能做了类似的事情:

readelf -l test | grep -i "file type"

实际上,这是位置无关可执行文件 (PIE) 的产物,并且readelf报告。

重要的部分是readelf正在报告DYN, and not报告EXE. EXE意味着它缺少 PIE,这通常会触发与安全相关的缺陷。


PIE 是在 Android 4.1 中添加的,但它是可选的。 Android 5.0 及以上版本需要 PIE。从Android 5.0 的安全增强 https://source.android.com/devices/tech/security/enhancements/enhancements50.html:

删除了非 PIE 链接器支持。 Android 现在要求所有动态链接的可执行文件支持 PIE(位置无关) 可执行文件)。这增强了 Android 的地址空间布局 随机化(ASLR)实施。


另请参阅位置独立的可执行文件 https://stackoverflow.com/q/30498776/608639在堆栈溢出上。它讨论了 PIE 和 Android。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Readelf 报告程序是共享库而不是可执行文件 的相关文章

随机推荐

  • 将所有 mysql 选定的行放入数组中

    我想知道 php 中是否有一个函数可以允许我将所有选定的数据放入一个数组中 目前我正在使用 mysql fetch array 正如我在手册中读到的那样 该函数不会获取表中的每条记录 result mysql query SELECT FR
  • 获取当前 ClickOnce 的应用程序发布者名称?

    是否可以读取当前运行的 ClickOnce 应用程序的发布者名称 您在Project Properties gt Publish gt Options gt Publisher name在 Visual Studio 中 我需要它的原因是运
  • SQL select通常是如何实现的

    我有两节课 class PopulationMember public void operationOnThisMember1 void operationOnThisMember2 private Population populalti
  • 带有透明图像的可拖动 Tkinter 标签仍然覆盖父画布中的图像

    我正在努力在背景图像顶部添加可拖动标签 其中标签是具有透明背景的图像 用于标签本身的图像是透明的 但标签本身相对于其父画布不透明 由于标签是可拖动的 我无法轻松使用父图像作为标签 并将透明图像粘贴在顶部 龙是一个可拖动的标签 具有透明背景
  • 如何在 AngularJS 中读取 Java 属性文件?

    有什么方法可以从位于网络服务器外部的 angularjs 读取属性文件吗 就像在java中一样 属性文件部署在项目之外 但是我们可以将项目中的这些文件作为filter properties读取 这样任何解决方案都可以在AngularJS中找
  • Android TV 上不会出现通知

    我正在 Android TV 上玩通知 不过 我无法在屏幕上显示通知 我正在使用 Android 6 0 上的 Nexus 播放器 当我在手机上运行此代码时 会出现通知 但在电视上 不会出现通知 我错过了什么吗 Override publi
  • 适用于 Mac OS X 的 SQL 客户端,可与 MS SQL Server 配合使用 [已关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 桌面应用程序的对象持久化策略

    我正在开发一个基于 Java 的桌面应用程序 我需要保留一些从应用程序对象模型生成的数据 最好保存到文件中 还需要保护持久文件 以便其他人无法从数据中获取对象模型详细信息 执行这些操作的最佳策略是什么 我的印象是这些要求对于桌面应用程序来说
  • 运营商部分应用

    如果我想在字符末尾添加一个空格以返回列表 如果我不传递任何参数 我将如何通过部分应用程序来完成此操作 还有类型是 space Char gt Char 由于使用 和 运算符出现 解析错误 我在末尾添加空格时遇到问题 到目前为止我所拥有的是
  • 如何将图像调整为原始大小

    Android s imageView has a serious flaw it makes my image into a square frame with the rest as white space How can I fix
  • EF Code First DBContext 和事务

    我想知道实现交易的最佳方式是什么DBContext 尤其 Does DbContext SaveChanges如果我更改多个实体 请在内部实施交易 如果我想打电话DbContext SaveChanges多次 相同上下文 不同上下文 如何实
  • 我是否应该将 CachingConnectionFactory 与 hornetq 2.4.1 一起使用

    根据有关在 hornetq 中使用 JMSTemplate 的长期信息 我们在连接到服务器时一直使用 CachingConnectionFactory 这是一个示例配置 与我们正在使用的配置非常相似
  • 如何从标准 url 获取用于嵌入的正确 soundcloud url?

    所以现在我可以从嵌入或 iframe 标签中已嵌入的 soundcloud 文件中获取 url 并在另一个页面上使用这些 url 并将其显示在 fancybox 中 如果用户提供典型的共享 url 例如 有没有办法获得正确的 url 或显示
  • $anchorScroll 和 $location 仅在第二次尝试后才有效

    我正在尝试使用 anchorScroll and location hash 滚动到div 我在页面顶部有一个底部 当我单击底部时 我希望页面向下滚动到我有一个页面的底部 div 由于某种原因 第一次单击该按钮时 我的页面不会滚动 如果第二
  • Spring Autowire 在同一类中创建 Bean 会导致:请求的 bean 当前正在创建错误*

    我知道该错误是不言自明的 但是当我将其余模板的设置从构造函数删除为 Autowired Qualifier myRestTemplate private RestTemplate restTemplate 时 它 起作用了 只是想知道如果同
  • 像使用 LaTeX 一样在 HTML 中引用定理

    我正在编写一些包含数学内容的网页 使用 MathJax 并且我正在寻找一种方法来进行与 LaTeX 定理引用等效的操作 如下例所示 begin theorem label thm commute a b b a end theorem Ac
  • 当 contenteditable 更改时触发事件

    当div值改变时 如何触发事件 div class changeable Click this div to edit it div 因此 当其内容发生变化时 我想创建警报和 或执行其他操作 changeable text change f
  • redirect_uri 以及如何在 SoundCloud 上托管callback.html?

    我正在尝试从笔记本电脑上的本地 HTML 页面访问 Soundcloud 我被困在将 callback html 托管为redirect uri 的部分 我尝试运行的脚本是来自 Soundcloud 文档页面的基本身份验证 JavaScri
  • 如何自定义处理 Quarkus 中未找到的资源/URL?

    我对 Quarkus 很陌生 我想知道如何覆盖提供错误日志的默认 404 页面 或者如何巧妙地将所有无法识别的 URL 重定向到 META INF recourses 目录中的自定义 HTML 使用 quarkus 0 20 你可以创建一个
  • Readelf 报告程序是共享库而不是可执行文件

    使用独立的 Android NDK r10e 工具链 使用 toolchain x86 clang3 6 开关构建 出现这种奇怪的行为 交叉编译的环境变量已设置在运行makefile之前 SYSROOT指向Android工具链位置 CXX等