我需要做一件非常不寻常的事情:手动执行一个elf可执行文件。IE。将所有部分加载到正确的位置,查询main()并调用它(然后清理)。可执行文件将被静态链接,因此无需链接库。我还控制基地址,所以不用担心可能发生的冲突。那么,是否有相应的库?我找到了OSKit和它的liboskit_exec,但是这个项目似乎从2002年就已经死了。我可以接受部分项目(当然,尊重许可证)并根据我的需要定制它们,但由于我在Linux世界中是一个菜鸟,我什至不知道在哪里可以找到这些部分!:)附言。我需要它用于ARM平台。UPD好吧,加载elfs的事情似乎需要一些很好的知识(叹息),所以我出去阅读一些规范和手册。
我有几个问题:为什么a.out被替换为ELF?导致ELF文件格式兴起的a.out格式的主要缺陷是什么?早期的核心转储基于a.out,但现在它们基于ELF。ELF提供的各种优势是什么? 最佳答案 a.out格式强制共享库在内存中占据固定位置。如果你想发布一个a.out共享库,你必须注册它的地址空间。这对性能有好处,但根本无法扩展。自己看howtrickyitwas(linuxjournal).相比之下,在ELF中,共享库可以加载到内存中的任何位置,甚至对于在同一台计算机上运行的不同应用程序来说似乎位于不同的地址(代码仍然有效地仅加载到
我已经使用LSBSDK构建了一个测试ELF程序(请注意,我的问题并非特定于LSB):$/opt/lsb/bin/lsbcctst.c$ls-la.out-rwxr-xr-x1mathmath107912009-10-1320:13a.out$filea.outa.out:ELF64-bitLSBexecutable,x86-64,version1(SYSV),dynamicallylinked(usessharedlibs),forGNU/Linux2.6.15,notstripped但是我无法启动它(是的,我向您保证文件在目录中...):$./a.outbash:./a.out:No
我有一个ELF32位LSB可执行文件,Intel80386,版本1(SYSV),动态链接(使用共享库),它也被剥离,我想探索它。有谁知道如何反编译这样的文件? 最佳答案 IDA加上Hex-Raysdecompiler可以decompile(对伪C代码)大多数32位x86代码,包括LinuxELF文件。免责声明:我为Hex-Rays工作。 关于linux-如何反编译ELF32位LSB可执行文件?,我们在StackOverflow上找到一个类似的问题: https
我在术语上很少混淆。AfilethatisgivenasinputtothelinkeriscalledObjectFile.ThelinkerproducesanImagefile,whichinturnisusedasinputbytheloader.我从“MSPE&COFF规范”中得到这个Q1.图像文件也称为BinaryImage、BinaryFile或简称为Binary。对吧?Q2.因此,根据上述术语,PE/ELF/COFF是ImageFile的格式,而不是ObjectFile。对吗?但是http://www.sco.com/developers/gabi/latest/ch4
我最近使用gcc在DebianLinux下编译了一个简单的helloworldC程序:gcc-mtune=native-march=native-m32-s-Wunused-O2-ohellohello.c文件大小为2980字节。我在十六进制编辑器中打开它,我看到了以下几行:GCC:(Debian4.4.5-8)4.4.5GCC:(Debian4.4.5-10)4.4.5.shstrtab.interp.note.ABI-tag.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.
我需要能够向ELF文件添加任意部分。我不能在这个程序中使用GPL代码,所以BFD是不可能的。我可以使用libelf/gelf来阅读部分,但是这些文档相当稀疏,我不知道如何添加一个部分。有人知道怎么做这个吗?我宁愿不编写自己的ELF代码。 最佳答案 我知道这是一个老问题,但我找到了一个工作示例,帮助我将它应用到我的项目中。(以防有人偶然发现这个问题)取自SourcewareMailArchiv$echo'intmain(){puts("Helloworld");}'|gcc-xc--c-ohello.o$echo"thisismysp
我的意思是gcc是否可以将一些源代码版本信息插入ELF二进制文件作为部分或类似的东西。我不想更改我的源文件,而是在Makefile中使用gcc选项添加一些信息。 最佳答案 如果您不介意只更改一次源文件,请添加如下内容:constvolatilestaticcharversion[]=VERSION;并编译:gcc-c-DVERSION='"1.2.3"'volatile防止gcc在更高的优化级别上删除字符串。正如所写,如果您忘记了-D选项,这将无法编译,这可能是好是坏,具体取决于您的要求。
我想写一个小函数的跟踪器。我使用ptrace。我在ubuntux86_64上。我想找到共享库函数的地址(比如printf)。但是我有一些关于全局偏移表的问题和疑问。我有以下代码:size_tbaseAddress=this->getBaseAddress();Elf_Ehdrconst*headerElf=static_cast(this->_manager.readMemory((void*)baseAddress,sizeof(Elf_Ehdr)));Elf_Phdrconst*headerProgram=static_cast(this->_manager.readMemory(
我刚刚向AWSLambda上传了一个zip,其中包括验证iOSGameCenter身份验证token(https://www.npmjs.com/package/ref)所需的“ref”(HowtoauthenticateGameCenterUserfrom3rdpartynode.jsserver)。不幸的是,调用它会导致“无效的ELFheader”错误,{"errorMessage":"/var/task/node_modules/ref/build/Release/binding.node:invalidELFheader","errorType":"Error","stackT