加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

支持Linux用户空间中的字节排序

发布时间:2020-12-14 01:39:05 所属栏目:Linux 来源:网络整理
导读:我正在用C编写 Linux程序来分析嵌入式系统生成的核心文件.核心文件可能是小端(ARM)或大端(MIPS),分析它们的程序可能在小端主机(x86)或大端(PowerPC)上运行. 通过查看标题,我知道核心是LE还是BE.我宁愿我的程序不需要知道它运行的主机是小端还是大端,我想用AP
我正在用C编写 Linux程序来分析嵌入式系统生成的核心文件.核心文件可能是小端(ARM)或大端(MIPS),分析它们的程序可能在小端主机(x86)或大端(PowerPC)上运行.

通过查看标题,我知道核心是LE还是BE.我宁愿我的程序不需要知道它运行的主机是小端还是大端,我想用API来处理它.如果没有更好的选择,我想我会开始依赖#ifdef __BIG_ENDIAN__.

在Linux内核中,我们有cpu_to_le32等从原生字节排序转换为小端等.在用户空间中有htonl等,它从原生端转换为大端,但是我找不到本机到小端的等价物.

任何人都可以为用户空间建议合适的API吗?

编辑:为了清楚,我正在寻找一个已经知道我的CPU是大端还是小端的API,并相应地交换.我不想为#ifdefs乱丢我的代码.我不只是在寻找代码片段来交换字节;谢谢你们,但那不是重点.

解决方法

基于你真正想要做的事情(阅读ELF核心转储文件而不必担心端序问题),我相信使用libelf,here和一个很好的教程 here,将是一个不错的选择.

这个库透明地与大端和小端ELF文件一起工作,并且在Linux下运行得很好,尽管它的FreeBSD起源(通常的“./configure”和“make”序列就是构建它所需要的).为了咧嘴笑,我在x86核心文件以及MIPS big-endian核心文件上尝试了“读取程序头表”示例(稍作修改以使其构建),它似乎“正常工作”.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读