- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
假设我们有一个名为 libtest.so 的共享库,其中有一个函数“foo”
使用 strip 丢弃 libtest.so 中的所有符号
$strip libtest.so
所以,现在如果我们使用:
$nm libtest.so
它会打印出来:
nm: libtest.so: 无符号
但如果我们使用:
$readelf -s libtest.so
foo 函数仍然可以从其结果中看出:
...
10: 000005dc 5 FUNC 全局默认值 12 _Z3foov
...
我们也可以使用命令字符串来检查它:
$strings libtest.so
...
_Z3foov
...
这是我的问题,为什么 nm 没有给出 strip 化 libtest.so 的结果?
谢谢
最佳答案
why nm give no result for striped libtest.so
原来的libtest.so
中有两个符号表:一个“常规”符号表(在.symtab
和. strtab
部分)和一个动态的(在 .dynsym
和 .dynstr
部分中)。
如果 strip
删除了两个符号表,您的库将完全没用:动态加载器无法解析其中的任何符号。所以 strip
做了唯一有意义的事情:删除“常规”符号表,保留动态符号表。
你可以使用nm -D
或readelf -s
查看动态符号表中的符号。
“常规”符号表仅对调试有用(例如,它包含静态函数的条目,这些条目不由库导出,也不会显示在动态符号表中)。
但动态加载器从不查看“常规”符号表(其格式不适合快速符号查找);只有在动态的。因此,正确的程序操作不需要“常规”符号表,但动态符号表是。
关于linux - 纳米与 "readelf -s",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9961473/
我使用的是 nano 2.2.6 版,我不知道为什么复制不起作用。 我现在做的是剪切然后粘贴两次,但之前我用的是Alt + 6没有问题,会发生什么?先感谢您 最佳答案 标记您想要的文本后,通过输入 (
我正在尝试使用 GCC 工具链将库 test.a 链接到可执行文件中。 我在使用 CMake 时从未经历过类似的事情,一切似乎都运行得很顺利,直到 > [100%] Linking CXX execu
当我在我的一个库上运行时: nm libmylib.so 我得到这样的一条线 U _ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4
目前,我正在使用 Arduino nano。当我在 Arduino IDE 中编译我的 c 代码时,出现以下错误。 程序上传成功,运行正常,请问是什么原因造成的?真的会影响arduino nano的性
我完全承认我是Ruby newb,这个问题可能只是出于我对 Ruby 的无知。 也就是说,我开始使用 nanoc project (并且喜欢它)。我想用这个来增强我的博客...但是:对于我的生活,我无
我有 25 个目标文件,它们组合在一起形成一个共享库。我已经使用 gcc 生成了共享库,当我使用 nm -D libmylib.so 寻找暴露的符号时,我发现了两个不需要的暴露符号,其名称为 i 和y
我需要将大型日志文件中的所有文本复制到剪贴板。我有一个到 Linux 的远程连接并且只使用控制台终端。我想要的是 Select all -> Copy。 在 emacs 中,我使用了 F10 -> E
$ nano error.log dyld: Library not loaded: /usr/local/opt/gettext/lib/libintl.8.dylib Referenced f
我是一名优秀的程序员,十分优秀!