草庐IT

Riscv-elf

全部标签

c++ - SYSV 与 Linux/GNU ELF 格式

问题是在以下问题的上下文中:Whyarelibrariesnotfound,eventhoughtheyareclearlyonthe-Lpath?.似乎我的库和目标文件具有不同的ELF格式,这可能会导致链接器无法“找到”库。现在,这导致了几个问题:我的编译器似乎正常生成SYSVELF文件。(通过file检查)。但是,对于那个特定的C++源代码,它会生成一个Linux/GNUELF目标文件。我想知道为什么,所以我将该源代码缩减为一个空的main方法-突然我得到了一个SYSV对象文件。C++源文件中的哪些内容会导致编译器切换ELF格式?我不能将Linux/GNU与SYSVELF链接在一起

linux - ELF 文件存在于/usr/bin 但结果为 "-ash: file: not found"

我正在尝试使用opkg在openwrt下安装一些新的软件包,并且安装成功,我们可以看到二进制文件确实存在于/usr/bin中,并且我已经进行了lld检查但是转出来一样。如下:root@OpenWrt/usr/bin[#]#opkgfilescfdiskPackagecfdisk(2.25.2-4)isinstalledonrootandhasthefollowingfiles:/usr/sbin/cfdiskroot@OpenWrt/usr/bin[#]#ls/usr/sbin/adjtimexarpingethtooliptables-savemkfs.ext3pppdtelnetd

c - ELF 二进制文件中默认信号处理程序的代码在哪里?

我知道当我们按下Ctrl+C时,会发出一个SIGINT信号,并且终止进程的默认操作将由内核完成。但是这个终止的代码是从哪里来的呢?它是在ELF二进制文件中还是内核为我们做的?我认为它在内核中,这就是为什么我们需要在源代码中自定义处理程序来覆盖信号行为。任何指点将不胜感激。 最佳答案 这是内核为我们做的事情。您可以通过阅读内核源代码中的signal.c文件找到所有信息。内核试图找到已注册信号处理程序的点从这里开始:http://lxr.free-electrons.com/source/kernel/signal.c#L2257225

linux - 如何在 Ubuntu 上运行无扩展名(也许是 ELF)文件?

我在Linux上获得了一个“二进制”文件,在Windows上获得了一个用于特定任务的单独文件。这些程序是Windows上的exe。该文件的linux版本在linux上具有与在windows上相同的功能。但是,我无法执行此操作。我尝试(在终端上)仅通过文件名./[filename]执行它,甚至尝试了chmod+x[filename]然后尝试了第二个方式。对于一切...我得到的结果是:“找不到命令”。(顺便说一句,文件肯定在那里)。我该怎么办?它的文件命令产生:ELF32-bitLSBexecutable,Intel80386,version1(SYSV),dynamicallylinke

c - elf文件中的全局变量在哪里

想学习elf文件,但是一想到全局变量,全局静态变量,作用域静态变量,我有些困惑。例如:inta=2;intb;staticintc=4;staticintd;voidfun(){staticinte=6;staticintf;}intmain(void){fun();}谁能说出每个变量属于哪个段?在我看来,b、d和f属于.bss段,a、c和e属于数据段,但是不知道全局静态变量和elf文件中的全局变量有什么区别。 最佳答案 可以使用objdump-t查看符号表:$objdump-tfoo|grep-P'\b(a|b|c|d|e|f)\

linux - 为什么共享库的 ELF header 将 Linux 指定为 OSABI?

我的Linux系统(Fedora9)上的所有标准共享库都指定ELFOSABI_NONE(0)作为它们的OSABI。这很好-但是我从供应商那里收到了一个共享库,其中ELFheader中给出的OSABI是ELFOSABI_LINUX(3)。对于用于Linux系统的共享库,这听起来不是一个不合理的值,但是它与我所有其他库的值不同-所以当我尝试打开这个库,带有dlopen(),来self的其他库之一,失败并出现错误“ELF文件操作系统ABI无效”。我编译了FreeBSD实用程序brandelf.c并使用它将OSABI类型更改为0,现在库似乎可以很好地处理其他所有内容。我只是想知道-为什么您认为

Linux、GNU GCC、ld、版本脚本和 ELF 二进制格式——它是如何工作的?

我正在努力了解更多关于Linux中的库版本控制以及如何将其全部投入使用的信息。这是上下文:--我有两个版本的动态库,它们公开了同一组接口(interface),比如libsome1.so和libsome2.so。--应用程序链接到libsome1.so。--此应用程序使用libdl.so动态加载另一个模块,比如libmagic.so。--现在libmagic.so链接到libsome2.so。显然,如果不使用链接器脚本隐藏libmagic.so中的符号,在运行时所有对libsome2.so中接口(interface)的调用都将解析为libsome1.so。这可以通过检查libVersi

linux - 如何 Hook 特定共享 ELF 库的函数?

LD_PRELOAD为整个过程Hook了一些函数,但我只需要通过名称为一个动态链接库Hook特定函数。 最佳答案 参见文章RedirectingfunctionsinsharedELFlibraries.附上ELFhooking的代码。 关于linux-如何Hook特定共享ELF库的函数?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/3045763/

linux - ELF文件中的Import Table在哪里?

我在字符串表中找到了“.dynsym”,得到了索引。然后我找到了sh_name=index&&sh_type=SHT_DYNSYM的部分。所以我得到sh_offset=464和sh_size=64。但是你可以在附图中看到,在偏移量464上只有零。我假设ImportTable从偏移量528开始。问题是:如何计算它%) 最佳答案 Butyoucanseeintheattachedpicture,thatontheoffset464thereareonlyzeros.错误:01、20、29、12等不是我上次检查时“只有零”。Isuppos

c++ - 将动态链接的 elf 二进制文件转换为静态链接

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭4年前。Improvethisquestion是否可以将动态链接的elf二进制文件转换为静态链接的文件?