19得票3回答
静态库(.a)和动态库(.so)之间的文件格式差异是什么?

我知道有很多关于使用共享库与静态库的用例的问题,但这个问题不涉及那方面。我想问的是,存储在磁盘上的文件格式有什么区别? 我的问题是,它们之间有什么区别?或者说它们完全相同,只是在使用方面有所不同? 我认为它们不同,因为在共享库上运行“nm”需要使用“-D”标志。显然,它需要进行一些不同的操...

19得票4回答
在Linux上使用COFF或在Windows上使用ELF

能否在UNIX上运行COFF可执行文件或在Windows上运行ELF可执行文件?以及如何才能在Windows和UNIX上运行任何一种文件类型。我只是好奇。

19得票1回答
ELF目标文件和共享对象之间的ELF头差异是什么?

首先,我从技术角度而不是库代码用户的角度来提出这个问题。一个例子是共享对象包含程序头文件而普通对象文件则不包含。还有哪些区别? 至于我的问题目的,我正在尝试确定需要从共享对象文件中删除哪些内容才能使链接器将其视为普通对象文件并尝试将其重新定位和静态链接到生成的可执行文件中,而不是将其识别为共...

19得票2回答
为什么objdump不显示.bss、.shstratab、.symtab和.strtab节?

我目前正在使用C语言实现自己的objdump。针对我的-s选项,我必须展示ELF文件中各节的完整内容。尽管我做得很好,但是展示的节比“真正”的objdump多。事实上,它没有输出.bss、.shstrtab、.symtab和.strtab节。我在Shdr结构体的sh_flags值周围寻找逻辑,...

19得票3回答
从Go二进制文件的TEXT指令中删除文件路径

我想要从使用go build创建的可执行文件中删除所有路径信息,例如/Users/myuser/dev/go/src/fooapi/spikes/mongoapi.go。 我是这样编译代码的: CGO_ENABLED=0 go build -v -a -ldflags="-w -s" -o...

18得票5回答
ELF核心文件格式

除了查看GDB源代码,我在哪里可以找到有关创建核心文件所使用的格式的文档? ELF 规范留下了核心文件格式的开放性,因此我认为这应该是GDB规范的一部分!遗憾的是,我没有在GNU的GDB文档中找到任何相关帮助。 这是我正在尝试做的事情:将虚拟地址映射到组成运行进程的可执行文件/库中的函数名...

18得票6回答
一个编译后的C++类是什么样子?

有一定汇编指令和C程序背景的我,可以想象编译后的函数会是什么样子,但有趣的是我从未认真思考过编译后的C++类会是什么样子。bash$ cat class.cpp #include<iostream> class Base { int i; float f; }; bash...

18得票2回答
为什么ELF文件中会包含其他共享库函数的长度信息?

我们的项目(C++, Linux, gcc, PowerPC)由几个共享库组成。在发布软件包的新版本时,只有那些实际受到影响的源代码才需要更改。这里的“更改”指的是绝对二进制身份(比较文件的校验和。不同的校验和代表着不同的版本,根据政策规定)。 (我应该提到整个项目总是一次性构建的,无论每个库...

18得票2回答
如何在每个成员的基础上覆盖类作用域下的__declspec(dllexport)注释?

在 ELF 目标上,如果我有一个类 `class Foo` 并通过像 `class __attribute__((visibility("default"))) Foo` 这样的声明将其设置为 `default` 可见性,那么我可以通过显式注释某些成员并使用 `__attribute__((v...

17得票1回答
如何添加私有成员变量会破坏C++的ABI兼容性?

pimpl idiom常用于动态链接库中的代码更改,以避免破坏ABI兼容性并不必重新编译依赖于该库的所有代码。 我看到的大多数解释都提到添加新的私有成员变量会改变类中公有和私有成员的偏移量。这对我来说很合理。但我不明白的是这实际上如何会破坏依赖的库。 我已经阅读了很多关于ELF文件和动态链...