草庐IT

Riscv-elf

全部标签

从0开始实现“鸿蒙qemu-riscv开机启动到launcher说明”文章并解决遇到问题

从0开始实现“鸿蒙qemu-riscv开机启动到launcher说明”文章并解决遇到问题文章链接如下https://isrc.iscas.ac.cn/gitlab/riscv/polyosmobile/documents/-/blob/master/milestone/qemu_launcher.md一、创建虚拟机环境1)VM新建ubuntu18.04虚拟机,配置时硬盘空间200G以上(很重要,很重要,很重要),版本很大。创建虚拟机所需的iso文件从官网下载即可,设置连接方式为桥连(很重要,很重要,很重要,不然后面一大堆问题)。2)安装curl,安装ifconfig,安装pip(apt-get

Xilinx Vivado bit文件和Microblaze elf文件合并的两种方法

    Xilinx使用Microblaze软核进行功能开发时,需要将Vivado生成的硬件bit文件和Vitis生成的软件elf文件进行合并,生成软硬结合的bit文件,然后可以选择将该bit文件烧进FPGA、或者将该bit文件转换成mcs文件/bin文件然后烧录至Flash中。    目前使用到了两种合并Vivadobit文件和Vitiself文件的方法,两种方法亲测均有效:1、使用Vivado进行合并(1)Vivado工程RunSythesis—>RunImplementation—>GenerateBitsteam正常走完,生成硬件bit文件。(2)导入vitis工程编译完成后生成的el

linux - 将 ELF 共享库和自定义 binfmt 可执行文件加载到同一 Linux 地址空间

我正在开展一个项目,以在Linux平台上加载和运行自定义二进制格式的可执行文件(在我的例子中为PE)。到目前为止,我已经非常成功地完成了这项工作,首先加载可执行文件,然后加载一个小型ELF共享库,该共享库调用可执行文件的起始地址,然后安全退出。不过,出于一些原因,我真的不想自己加载ELF。首先,我使用的共享库是用汇编编写的(我不能使用其他任何东西,因为我没有链接到libc等),这将是非常特定于平台的,而且我'我想摆脱它并使用C,这样我就可以为任何平台编译。此外,使用Linux的原生ELF加载器而不是我自己的简化版本会更容易和更安全。我想知道是否有办法使用我的binfmt处理程序(一个已

linux - 将 ELF 共享库和自定义 binfmt 可执行文件加载到同一 Linux 地址空间

我正在开展一个项目,以在Linux平台上加载和运行自定义二进制格式的可执行文件(在我的例子中为PE)。到目前为止,我已经非常成功地完成了这项工作,首先加载可执行文件,然后加载一个小型ELF共享库,该共享库调用可执行文件的起始地址,然后安全退出。不过,出于一些原因,我真的不想自己加载ELF。首先,我使用的共享库是用汇编编写的(我不能使用其他任何东西,因为我没有链接到libc等),这将是非常特定于平台的,而且我'我想摆脱它并使用C,这样我就可以为任何平台编译。此外,使用Linux的原生ELF加载器而不是我自己的简化版本会更容易和更安全。我想知道是否有办法使用我的binfmt处理程序(一个已

c++ - 如何计算 ELF 文件中的静态初始值设定项?

我正在尝试对C++文件中的静态初始值设定项进行计数。我已有的解决方案(用于与gcc-4.4一起使用)正在查看.ctorsELF部分的大小。升级到gcc-4.6后,这似乎不再返回有效结果(静态初始化器的计算数量为0,这与实际情况不符,例如nm返回的结果)。现在的问题是我希望解决方案即使在没有符号的情况下也能工作(否则我会使用nm)。下面是示例可执行文件的readelf-SW的输出:有35个节头,从偏移量0x4f39820开始:SectionHeaders:[Nr]NameTypeAddrOffSizeESFlgLkInfAl[0]NULL0000000000000000000000000

c++ - 如何计算 ELF 文件中的静态初始值设定项?

我正在尝试对C++文件中的静态初始值设定项进行计数。我已有的解决方案(用于与gcc-4.4一起使用)正在查看.ctorsELF部分的大小。升级到gcc-4.6后,这似乎不再返回有效结果(静态初始化器的计算数量为0,这与实际情况不符,例如nm返回的结果)。现在的问题是我希望解决方案即使在没有符号的情况下也能工作(否则我会使用nm)。下面是示例可执行文件的readelf-SW的输出:有35个节头,从偏移量0x4f39820开始:SectionHeaders:[Nr]NameTypeAddrOffSizeESFlgLkInfAl[0]NULL0000000000000000000000000

c - 从 ELF 二进制文件中仅提取我的函数名称

我正在编写一个脚本来提取二进制文件中的所有函数(由用户编写)。下面的shell脚本提取了我的函数名以及一些以__开头的库函数readelf-s./a.out|gawk'{if($4=="FUNC"&&$3!="0"&&$7=="13"&&$8!="main"){print"b"$NF;//***Updated}}'&>function_names;function_names文件的输出:b__libc_csu_finibPrintDividerbPrintFooterb__libc_csu_initbPrintHeader我只想提取我的函数。那么如何检查函数名称是否以__开头,或者其他

c - 从 ELF 二进制文件中仅提取我的函数名称

我正在编写一个脚本来提取二进制文件中的所有函数(由用户编写)。下面的shell脚本提取了我的函数名以及一些以__开头的库函数readelf-s./a.out|gawk'{if($4=="FUNC"&&$3!="0"&&$7=="13"&&$8!="main"){print"b"$NF;//***Updated}}'&>function_names;function_names文件的输出:b__libc_csu_finibPrintDividerbPrintFooterb__libc_csu_initbPrintHeader我只想提取我的函数。那么如何检查函数名称是否以__开头,或者其他

c - 如何从进程内存镜像创建 ELF 可执行文件

首先,英语不是我的母语。如有错误请多多包涵。如上所述,我想从进程内存镜像创建一个ELF可执行文件。到目前为止,我成功地提取了一个ELFheader、程序header和一个位于动态段中的Elf64_Dyn结构列表。我也恢复了GOT。但是,我不知道如何重建节标题。问题是当ELF可执行文件被加载到内存中时,节头没有被加载。如果我们在Dynamic段中使用Elf64_Dyn结构列表,我们可以获得.rela*段的地址、GOT的地址、字符串表的地址等。但是,它不包含.text和.data等部分的地址。要重建节头,我们需要节的偏移量和地址,但似乎没有办法获得这些信息。如何正确地重建章节标题?感谢您的

c - 如何从进程内存镜像创建 ELF 可执行文件

首先,英语不是我的母语。如有错误请多多包涵。如上所述,我想从进程内存镜像创建一个ELF可执行文件。到目前为止,我成功地提取了一个ELFheader、程序header和一个位于动态段中的Elf64_Dyn结构列表。我也恢复了GOT。但是,我不知道如何重建节标题。问题是当ELF可执行文件被加载到内存中时,节头没有被加载。如果我们在Dynamic段中使用Elf64_Dyn结构列表,我们可以获得.rela*段的地址、GOT的地址、字符串表的地址等。但是,它不包含.text和.data等部分的地址。要重建节头,我们需要节的偏移量和地址,但似乎没有办法获得这些信息。如何正确地重建章节标题?感谢您的