草庐IT

linux - 将运行Linux进程中的内存地址范围转换为目标文件中的符号?

这是文件/proc/self/smaps的片段:00af8000-00b14000r-xp00000000fd:0016417/lib/ld-2.8.soSize:112kBRss:88kBPss:1kBShared_Clean:88kBShared_Dirty:0kBPrivate_Clean:0kBPrivate_Dirty:0kBReferenced:88kBSwap:0kB00b14000-00b15000r--p0001c000fd:0016417/lib/ld-2.8.soSize:4kBRss:4kBPss:4kBShared_Clean:0kBShared_Dirty:

linux - 海湾合作委员会/G++ : building without GNU unique object symbols for older Linux kernels

我目前正在为一大堆代码更新构建系统,其中恰好包括一个LinuxC++项目。如果这里的所有开发人员都可以在根据自己的想法进行修改时运行一个构建,那就太好了,所以我正在研究是否有可能在模糊的现代Linux系统上构建它,尽管目标系统是2.6.18。通过“模糊现代”,我估计是GCC4.5+之类的东西,过去一两年的发行版可能会附带一些东西。目前,我通过静态编译来解决libstdc++问题,并且通过使用一些快速的包装代码重新映射到旧版本的memcpy符号(等等),可以巧妙地解决任何glibc问题。到目前为止一切顺利。我似乎无法完全弄清楚的一个问题是,.o文件中内置到可执行文件中的某些符号属于“u”

linux - 海湾合作委员会/G++ : building without GNU unique object symbols for older Linux kernels

我目前正在为一大堆代码更新构建系统,其中恰好包括一个LinuxC++项目。如果这里的所有开发人员都可以在根据自己的想法进行修改时运行一个构建,那就太好了,所以我正在研究是否有可能在模糊的现代Linux系统上构建它,尽管目标系统是2.6.18。通过“模糊现代”,我估计是GCC4.5+之类的东西,过去一两年的发行版可能会附带一些东西。目前,我通过静态编译来解决libstdc++问题,并且通过使用一些快速的包装代码重新映射到旧版本的memcpy符号(等等),可以巧妙地解决任何glibc问题。到目前为止一切顺利。我似乎无法完全弄清楚的一个问题是,.o文件中内置到可执行文件中的某些符号属于“u”

linux - 在用户模式下读取 kallsyms

我正在编写有关低级内容的代码。我需要知道内核符号地址才能编写可靠的代码。所以我在Ubuntukernel-3.0.19的用户模式下尝试读取kallsyms。这是用户模式下的kallsyms输出。...00000000r__ksymtab_prepare_kernel_cred00000000r__kcrctab_prepare_kernel_cred00000000r__kstrtab_prepare_kernel_cred...我如何在用户模式下解决这个问题。当我root时,一切正常,但这不是我需要的。谢谢。 最佳答案 /proc

linux - 在用户模式下读取 kallsyms

我正在编写有关低级内容的代码。我需要知道内核符号地址才能编写可靠的代码。所以我在Ubuntukernel-3.0.19的用户模式下尝试读取kallsyms。这是用户模式下的kallsyms输出。...00000000r__ksymtab_prepare_kernel_cred00000000r__kcrctab_prepare_kernel_cred00000000r__kstrtab_prepare_kernel_cred...我如何在用户模式下解决这个问题。当我root时,一切正常,但这不是我需要的。谢谢。 最佳答案 /proc

linux - 如何限制对共享对象中符号的访问?

我有一个共享库(bar.so)形式的插件,它链接到一个更大的程序(foo)。foo和bar.so都依赖于同一个第三方库(baz),但它们需要将baz的实现完全分开。因此,当我链接foo(使用提供的目标文件和存档)时,我需要它忽略bar.so中对baz的任何使用,反之亦然。现在,如果我将foo与--trace-symbol=baz_fun链接,其中baz_fun是有问题的符号之一,我将得到以下输出:bar.so:definitionofbaz_funfoo/src.a(baz.o):referencetobaz_fun我相信这告诉我foo正在从bar.so引用baz_fun(并且foo的

linux - 如何限制对共享对象中符号的访问?

我有一个共享库(bar.so)形式的插件,它链接到一个更大的程序(foo)。foo和bar.so都依赖于同一个第三方库(baz),但它们需要将baz的实现完全分开。因此,当我链接foo(使用提供的目标文件和存档)时,我需要它忽略bar.so中对baz的任何使用,反之亦然。现在,如果我将foo与--trace-symbol=baz_fun链接,其中baz_fun是有问题的符号之一,我将得到以下输出:bar.so:definitionofbaz_funfoo/src.a(baz.o):referencetobaz_fun我相信这告诉我foo正在从bar.so引用baz_fun(并且foo的

linux - 避免从 Linux 上的可执行文件中导出符号

我发现当我将可执行文件链接到静态库(.a)时,静态库中的符号最终由可执行文件导出。我想避免这种情况并且不导出任何内容。我试过提供一个版本脚本,但似乎没什么区别。我的版本脚本内容如下:{global:main;local:*;};有没有办法在静态库中链接时不从可执行文件中导出符号?我无法重新编译静态库本身。 最佳答案 默认情况下,可执行文件不导出符号,除非您使用-Wl,--export-dynamic,否则不会导出符号。仅当您动态加载本身需要链接到主可执行文件中的符号的库时才需要这样做(如果您的库包含覆盖exe中的虚拟方法的类,这在C

linux - 避免从 Linux 上的可执行文件中导出符号

我发现当我将可执行文件链接到静态库(.a)时,静态库中的符号最终由可执行文件导出。我想避免这种情况并且不导出任何内容。我试过提供一个版本脚本,但似乎没什么区别。我的版本脚本内容如下:{global:main;local:*;};有没有办法在静态库中链接时不从可执行文件中导出符号?我无法重新编译静态库本身。 最佳答案 默认情况下,可执行文件不导出符号,除非您使用-Wl,--export-dynamic,否则不会导出符号。仅当您动态加载本身需要链接到主可执行文件中的符号的库时才需要这样做(如果您的库包含覆盖exe中的虚拟方法的类,这在C

c++ - 符号可见性和命名空间

我正在Linux和gcc上试验C++符号可见性。似乎首选的方法是使用-fvisibility=hidden,并根据Visibilitygccwiki页面(http://gcc.gnu.org/wiki/Visibility)一个接一个地导出使用的符号。我的问题是许多库不能很好地处理这个问题,他们忘记显式导出符号,这是一个严重的问题。在修复了几个bug之后,甚至boost的某些部分仍然可能受到影响。当然这些错误应该被修复,但在此之前我想使用一种“安全”的方式来隐藏尽可能多的符号。我想出了一个解决方案:我将所有符号放在一个命名空间中,并在其上使用符号隐藏属性并导出公共(public)接口(