问题标签 [nm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1156 浏览

c - 共享库中未定义的外部符号

我最近在 iOS SDK4.3nm -m -p -gSystem.B.dylib库上运行,惊讶地发现很多符号标记为(undefined) (external). 为什么以及何时将未定义的符号标记为外部?我可以理解标记的未定义外部符号lazyweak但这些不是。许多pthread_xxx功能都属于这一类。但是,当我与此库链接时,所有符号都已解析。这些pthread_xxx符号是在\usr\lib\system文件夹中的一个库中定义的,所以我假设它们从那里得到满足。在链接期间它是如何工作的?

0 投票
1 回答
1264 浏览

debugging - 调试二进制文件:如何转储每个符号来自哪个 .a/.o?

我有一个启用调试的二进制文件、与之静态链接的 .a 文件的集合,以及所有内容的源代码。

如何获得一个可解析的转储,其中列出了最终可执行二进制文件中的每个符号名称,以及它来自哪个 .a 和 .o?(如果可能,加上原始 .c/.cpp 文件。)

库中有一系列交叉依赖、循环依赖,甚至是几个定义的符号,我试图将它们映射出来,最终目标是重新创建构建系统。不知何故,旧的构建系统设法将所有东西连接在一起。(我认为更多的是偶然而不是设计......)

到目前为止,我已经尝试了各种调用,nm但似乎无法获得这些数据。也许nm是错误的工具。

0 投票
0 回答
431 浏览

c++ - addr2line 显示错误的函数名称:“本地”文本符号不是“全局”

这可能是由于使用了相当旧的操作系统(RHEL 4)或编译器(g++ 3.4.6),但想知道是否有人看到过这个。

使用nm,我可以看到单个函数被多个.LXXXX 形式的本地文本符号(类型't')分割,其中X 是数字,例如.L5156。全局文本符号(类型“T”)是实际的函数名称。

但 addr2line 似乎将本地文本符号视为有效的函数名称。因此,如果我在本地文本符号后面给它一个地址,它会将其作为函数名称返回。

对于如何解决这个问题,有任何的建议吗?(不升级操作系统或编译器......我接受这可能是不可能的......)

0 投票
1 回答
6576 浏览

linux-kernel - 确定剥离的 Linux 内核映像的加载地址和入口点

我的 x86 Linux 上有一个用于嵌入式系统 (mipsel) 的交叉编译工具链。我知道如何为它构建一个自定义内核(让我们称之为“vmlinux”)以及如何通过

为了进一步处理,我还需要图像的加载地址和入口点。scripts/mksysmap剥离之前,通过或更明确地确定它们是没有问题的

然后我可以通过

现在的挑战是,有时我不自己构建内核,而是在通过objcopy剥离其符号获得一个预构建的内核。谁能告诉我该怎么做?我对内核构建和工具链的使用不是很精通。nm和objdump都不喜欢剥离的图像,说

0 投票
3 回答
2008 浏览

unix - 为什么 `nm` 实用程序这样命名?

列出二进制符号的nm实用程序在其文档中不包含任何关于它如何被命名的解释或线索nm

我想一些经验丰富的 UNIX 开发人员可以有所启发。

为什么该nm实用程序如此命名?

0 投票
3 回答
3614 浏览

c++ - 从 C++ 源文件创建全局变量列表

我现在正在解决问题,它的声明 - 生成文本文件,其中包含 .CPP 文件中所有声明的全局变量的列表。

我想出了几个想法,第一个:

尝试使用 ctags,所以我写了一些简短的脚本:

这段代码从 cpp_source_file_list.txt 获取 .cpp 源文件的文件名,扫描它以查找全局变量(忽略 const)并写入报告“文件名 [变量列表]。我遇到的主要问题是 ctags 忽略的行为非常奇怪在某些情况下,STL 类型。

例如,它可以排除行 ike "vector v;",但包括 "std::vector v;"。

有没有办法解决这样的问题?尝试使用 ctags -I ./id.txt 附加键并手动列出要覆盖的标识符,但这也会带来不正确的结果。

第二种方式:

使用 nm 命令,例如:

但在这种情况下,我会收到不必要的信息,例如:

现在我不知道如何改进这些方法之一以从任意 .cpp 源文件中接收有关声明的全局变量列表的正确信息。我很高兴听到有关此问题的任何建议。

0 投票
2 回答
945 浏览

linux - 为什么 /lib32/libc.so.6 里面有两个“fopen”符号?

这是我的问题:

  1. 为什么 /lib32/libc.so.6 里面有两个 fopen 符号?应该禁止同一目标文件中的相同符号,对吗?

  2. 为什么 readelf -s 转储 fopen@@GLIBC_2.1 和 fopen@GLIBC_2.0 而不是 fopen?

谢谢

0 投票
1 回答
394 浏览

ios - iOS 5.1 - GDB 命令或实用程序列出特定共享库中的函数

有命令可以在 gdb 中列出程序中的所有函数,但我没有找到任何 untilities 或 gdb 命令/语法来仅列出特定共享库中的符号。nm 不适用于 arm7 共享库。知道怎么做吗?

0 投票
1 回答
2142 浏览

elf - 来自 elf 可执行文件的结构中元素的地址

是否可以从不为调试编译的 ELF 可执行文件中获取结构中元素的地址?

例如,给定以下代码:

nm 和 readelf 都给出了变量“places”的起始地址,readelf 也给出了 sizeof:

但是我需要的是结构中每个元素的地址。所以从上面我想要的是:

我目前唯一的方法是使用 dwarf2 调试信息进行编译,使用 readelf (-wliao) 转储 .debug_info 部分,然后从 DW_TAG_variable 中解析类型树,并加上 base_type 大小。示例自述:

我需要找到一种在不访问源代码的情况下执行此操作的方法,并且关闭调试信息..

任何帮助或指针表示赞赏。

谢谢,克里斯

0 投票
2 回答
52097 浏览

macos - Mac OS X 中你最喜欢的反汇编工具是什么?

我正在使用otool,nmFraise文本编辑器来反汇编Mach-o二进制文件。此时我的工作流程非常简单:

    1.列出已存在的符号。
    2.获取disasm代码。
    3. 将此输出复制并粘贴到文本文件中。
    4.在文本编辑器中阅读并评论代码:)

我正在寻找可以简化使用 disasm 代码的工具Mac OS X