【如何测试Linux二进制文件是否编译为位置无关代码?】教程文章相关的互联网学习教程文章

linux-如何仅编译ARM32二进制文件(无经验)

是否存在GCC配置,该配置将生成仅包含ARM32代码的可执行文件?我知道-marm开关告诉编译器不要产生Thumb代码,但是它仅适用于程序的用户代码,而初始化例程(例如_start,frame_dummy等)仍然包含Thumb指令.我在Linux x86-64系统上使用Linaro交叉编译器工具链(arm-linux-gnueabihf-). 编辑: 在重新编译工具链时,我自己找到了(可能的)解决方案.编码为Thumb的初始化例程是glibc的一部分,可以在目标文件crt1.o,crti.o和crtbegin.o中找到.我没...

为Linux创建R二进制包,可以安装在不同的机器上?

我很确定这是不可能的,因为如果是,那么CRAN将拥有R Linux二进制包.为什么不可能?我们可以创建R包的Mac和Windows二进制版本,这些tgz / zip文件可以安装在不同的系统上.为什么我们不能为Linux做同样的事情? 我猜是因为有很多不同的发行版,每个发行版都不同.是否可以为Debian / Ubuntu和RHEL / CentOS创建二进制文件? 如果有可能,我们该怎么做?谢谢.解决方法:不同的编译器版本,不同的libc / libstc版本,不同的“其他库”版本,不同...

确定Linux(库或可执行文件)中二进制文件的目标ISA扩展

我们遇到了一个与在Advantech POS板上使用Via C3处理器在(相当旧的)FC3下运行的Java应用程序相关的问题. java应用程序有几个已编译的共享库,可通过JNI访问. 通过C3处理器应该是i686兼容.前段时间在使用相同处理器的MiniItx主板上安装Ubuntu 6.10之后,我发现之前的声明并非100%正确.由于缺少C3处理器中i686设置的一些特定和可选指令,Ubuntu内核在启动时挂起.在使用i686优化时,GCC编译器默认使用i686集的C3实现中缺少的这些指令.在这...

linux – 如何将版本信息嵌入共享库和二进制文件?【代码】

在Linux上,有没有办法将版本信息嵌入到ELF二进制文件中?我想在编译时嵌入这些信息,以便以后可以使用脚本将其解压缩.一种hackish方式是植入可以使用strings命令提取的东西.是否有更传统的方法,类似于Visual Studio植入Windows DLL的版本信息(DLL属性中的注释版本选项卡)?解决方法:如果使用cvs或subversion,一种方法是在源文件中专门设置一个特殊的id字符串.然后向cvs或svn添加预提交挂钩,以便在提交更改时使用新版本的文件更新该特...

linux – 如何自我dlopen可执行二进制文件【代码】

我写了一个程序来自我解决void hello() { printf("hello world\n"); } int main(int argc, char **argv) { char *buf="hello"; void *hndl = dlopen(argv[0], RTLD_LAZY); void (*fptr)(void) = dlsym(hndl, buf); if (fptr != NULL) fptr(); dlclose(hndl); }但我得到“segemention fault”错误我用.so库测试了这个程序,它可以工作,但不能让它自己工作解决方法:你需要编码:// file ds.c#include <stdio.h>#include <stdlib.h>#in...

确定Linux二进制文件的直接共享对象依赖项?【代码】

如何轻松找到ELF格式的Linux二进制文件的直接共享对象依赖项? 我知道ldd工具,但似乎输出了二进制文件的所有依赖项,包括二进制文件所依赖的任何共享对象的依赖项.解决方法:您可以使用readelf来探索ELF标头. readelf -d会将直接依赖项列为NEEDED部分.$readelf -d elfbinDynamic section at offset 0xe30 contains 22 entries:Tag Type Name/Value0x0000000000000001 (NEEDED) Shared li...

linux – postgres copy命令,二进制文件【代码】

我正在使用COPY将字段从表复制到文件.这个字段是一个压缩文本文件,所以我使用二进制副本.创建文件时,唯一的问题是COPY会在文件中添加标题和预告片(?),这是我不需要的.可以改变吗?是否有一个参数可以导致COPY将字段与数据库中的字段完全相同? 如果我手动删除不需要的标头,我可以使用zcat或gunzip提取文件. 我做的事情是这样的:psql -d some_database -c "copy (select some_column from a_table where id=900) to stdout with...

c – 创建在“所有”Linux distrubtion上运行的二进制文件

我知道这个问题可能被问到了一百万次,但没有一个问题能得到一个如何实际应用的答案,没有人可以解释我将要展示的内容. 所以,问题在于:有许多软件供应商提供适用于所有Linux发行版的单一软件包,当我说完所有时,我的意思是至少主要的(Debian,Redhat和Arch).我试过了,他们都工作了. 我的问题是:他们是怎么做到的? 我所知道的:我知道有关二进制不兼容的旧闻.请不要重复那个讲座.任何想要从这个问题及其答案中受益的人,如果您从未听说...

linux – 使用$ORIGIN指定ELF二进制文件中的解释器不起作用【代码】

我正在使用patchelf修改rpath和已编译二进制文件的解释器.对patchelf的调用看起来像这样:patchelf --set-interpreter "\$ORIGIN/lib/ld-linux-x86-64.so.2" --set-rpath "\$ORIGIN/lib" ./grep通过运行readelf -l ./grep |进行验证,正确设置了这些grep解释器,输出:[Requesting program interpreter: $ORIGIN/lib/ld-linux-x86-64.so.2]但是,当我尝试运行可执行文件时,出现以下错误:-bash: ./grep: No such file or directory这似...

如何调试远程linux二进制文件?【代码】

情况如下: 我有一个崩溃的Linux二进制文件.没有日志文件,跟踪文件等.我需要能够将调试器附加到它(我本地有源)并跟踪错误. 什么是解决这个问题的最简单,最好的方法?解决方法:远程调试非常简单:在目标平台上,使用GDBserver启动应用程序,同时指定用于侦听传入TCP连接的主机和端口:gdbserver HOST:PORT PROG [ARGS ...]在开发工作站上,启动跨目标GDB:powerpc-7450-linux-gnu-gdb PROG请务必指定未剥离的可执行文件.在GDB控制台中,...

linux – 从管道读取数据并写入标准输出,中间延迟.必须处理二进制文件【代码】

我现在已经尝试了大约一个小时来找到解决这个问题的优雅方案.我的目标基本上是编写带宽控制管道命令,我可以在各种情况下重复使用(不仅仅是网络传输,我知道scp -l 1234).我想做的是: >延迟X秒.>从管道读取Y量(或者如果没有足够的话,小于Y).>将读取数据写入标准输出. 哪里: > X可以是1..n.> Y可以是1个字节,直到某个高值. 我的问题是: >它必须支持Bash无法很好处理的二进制数据. 我采取或至少考虑过的道路: >使用while read数据结...

linux – 为什么剥离的二进制文件仍然可以在反汇编文件中拥有库调用信息?【代码】

测试平台是32位Linux. 我编译了一个没有条带信息的c程序,并使用objdump来反汇编elf可执行文件. 这是结果的一部分.804831c: e8 8c fe ff ff call 8048360 <printf@plt>如果我使用:strip binary 要删除符号信息并使用objdump再次反汇编elf可执行文件,我仍然可以看到如下结果:804831c: e8 8c fe ff ff call 8048360 <printf@plt>所以我的问题是: 在我删除了所有符号信息之后,像objdump这样的反汇编工具如何知道某些库函数...

为什么Linux上的Subversion客户端将我的XML文件检测为二进制文件?【代码】

我在Linux上的svn客户端有奇怪的错误. 我想将test.xml文件添加到存储库.此文件是标准XML文本文件,仅包含拉丁字符(无BOM)和Linux行尾(仅限LF).但我的svn客户端失败了:[mn@mn testy]$cat test.xml <?xml version="1.0" encoding="UTF-8"?> <Test>test</Test> <Test>89012345678901234</Test> [mn@mn testy]$file test.xml test.xml: XML document text [mn@mn testy]$svn add test.xml svn: E200009: Can't set 'svn:eol-style': f...

linux – 如何设置二进制文件的RunPath?【代码】

有无数线程描述什么是RPATH,RUNPATH和LD_LIBRARY_PATH以及它们如何交互以解析库的位置. 要设置RPATH,请使用gcc选项:-Wl,-rpath,/path/to/dir要设置LD_LIBRARY_PATH,请使用:export LD_LIBRARY_PATH= <path of lib>我找不到的是如何设置RUNPATH?解决方法:如果您传递–enable-new-dtags,则似乎将runpath设置为-Wl值 http://blog.tremily.us/posts/rpath/ 这个链接似乎暗示rpath和runpath的使用差异似乎是它们在搜索列表中的顺序: ...

linux – 从源代码编译新的二进制文件时会发生什么?【代码】

我已经通过包管理器安装了来自存储库的git后,我从源代码编译了git. 在这个过程中,“from source”git取代了“主要系统git”.user@jeanny:~$git --version git version 1.8.3.2有没有办法将回购中的git设置为“主系统git”?解决方法:您可以通过执行以下操作来确认:$/usr/bin/git --version$/usr/local/bin/git --version您现在可能已经安装了2个版本的git,这是完全没问题的,只要它们保存在不同的目录中即可. 新编译的git很可能是目...