问题标签 [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 投票
0 回答
190 浏览

debug-symbols - 如何访问库的符号表,查找例程符号名称

我需要识别链接到 OpenSSL 库的 linux 可执行文件中使用的加密例程的地址。如何访问 openssl 符号表?

如何从 openssl cyptolib 中检索上述信息?

谁能帮我解决这个问题?

0 投票
1 回答
4159 浏览

bash - 如何使用 find、nm 和 grep 在许多共享库中查找符号?

我正在努力使用正确的命令来执行以下操作:

查找所有包含特定符号的共享库 (*.so)。

这是我尝试过的:

上面给出了一些找到符号的输出,但没有查明出现符号的文件名。我给 grep 告诉它打印文件名的任何标志都丢失了,因为 grep 是从 stdin 提供的。

另一种尝试:

这是行不通的,因为这两个 exec 是完全独立的。

我应该怎么办?

0 投票
0 回答
245 浏览

gcc - 如何使用 nm 或 objdump 和/或任何其他可用工具来查明 .so 文件中的违规函数/方法?

问题:从 RH5(gcc 4.1.2 和 GLIBC 2.5)迁移到 RH6(gcc 4.4.7 和 GLIBC 2.12)的问题

详细信息:我正在将一个大项目从 RH5 (gcc 4.1.2) 迁移到 RH6 (gcc 4.4.7),一切都可以编译和链接,没有任何问题。

在 RH5 上编译的代码在两台主机(RH5 和 RH6)上运行良好。

但是,在 RH6 上编译的代码在任何一个上都不起作用。

没有运行时错误,只是我运行失败的众多回归测试之一。

这是复杂的因素:我的代码创建了一个模拟机器(微处理器)运行回归测试的软件/固件是在这个模拟机器上运行的软件,我没有调试这个固件。

当我在 RH6 主机中编译我的代码时,该错误被注入我能够将问题定位到两个对象文件 (.o),它们链接到创建一个共享对象文件 (.so),它是我的模拟机器的一部分.

如果我在 RH6 机器(使用 gcc 4.4.7 的机器,在我的回归测试期间可执行文件失败)上编译代码,然后添加在 RH5(gcc 4.1.2)上编译的两个有问题的(.o)文件并重新编译( .so) 文件(共享对象)使用这两个 .o 文件然后一切正常,我的回归测试通过没有任何问题;顺便说一句,它在 RH5 和 RH6 机器上都通过。

我正在使用“nm”和“objdump”试图找出有问题的函数/函数或库/库或其他什么。

我的问题: 1- 我如何利用这些工具(nm 和/或 objdump)来真正确定罪魁祸首?(如果我在从 RH5 和 RH6 生成的 .so 文件上运行上述命令并比较输出文件,我可以看到很大的差异,但由于每个编译器的具体情况及其上下文以及什么可能是潜在问题)

2-有没有其他工具可以真正帮助我调查和解决这个问题?

3- 如果我将 RH6 的 .so 文件和 RH6 的 .so 文件的 nm/objdump 输出与 RH5 的两个 .o 文件进行比较,它们看起来很相似,我看不到缠结线的末端以试图解开它,查看这些输出文件并尝试解决问题的方法是什么?

我感谢任何意见、建议和贡献。

0 投票
1 回答
255 浏览

gdb - nm 与 gdb 中断

我正在开发 Ubuntu 14.04 LTS。

我有一个execfile.c. 使用file.c静态库中的函数。例如,假设它fubar()file.c. 这是我注意到的。

  • nm exec | grep fubar给出一定的值。
    (在我的系统和我的可执行文件上,0808377f
  • gdb ./exec然后break fubar给出不同的值。
    (在我的系统和我的可执行文件上,0x8083785

exec1当我对另一个可执行文件(编译自file1.c,它为两个命令输出相同的值)做类似的事情时。

这两个命令都应该输出相同的虚拟地址。不是吗?我显然错过了一些东西。有人可以解释到底发生了什么吗?这两个命令有什么区别。

0 投票
4 回答
4653 浏览

c - 如何区分静态函数与 C 中的 nm 或 readelf 输出

我正在尝试在可执行文件上处理 nm 或 readelf -s 的输出。但是,我无法在输出中区分静态函数。

这是我正在使用的内容:

测试.c

其他.c

我像这样编译这些:

然后运行 ​​nm 命令以获取所有符号:

其中出现了以下两个符号(对于我的静态函数):

有没有一种方法可以区分特定的 foo 函数来自哪个文件?或者我需要在编译之前做一些魔法才能让它工作吗?

对于我的用例,我应该补充一点,我可以访问最终的二进制文件和它使用的目标文件,但我实际上无法自己构建它以确保它具有符号表。

谢谢!

0 投票
2 回答
1325 浏览

c++ - 哪些局部变量会进入 Data/BSS 段?

这里的手册页nmMAN NM

符号类型。至少使用以下类型;其他的也取决于目标文件格式。如果是小写,符号通常是本地的;如果是大写,则符号是全局的(外部的)

在它下面有“未初始化数据部分(称为 BSS)”的“b”和“B”以及“初始化数据部分”的“d”和“D”

但我认为局部变量总是转到堆栈/堆而不是“数据”或“BSS”部分。那么nm在说什么局部变量呢?

0 投票
1 回答
117 浏览

c++ - GCC 的 nm 列出了方法的多个条目

nm 列出的单个方法有多个条目是否正常?我运行了以下内容:

并收到以下信息:

这对我来说似乎是错误的。你觉得不对吗?如果是这样,您能否详细说明为什么它是错误的以及可能导致它的原因?如果它仅在某些情况下是正确的,那么我将更多地解释让我查看 nm 输出的问题,我们可以从那里开始。

0 投票
2 回答
2411 浏览

c - nm输出和gdb函数地址不同

让我们只关注Rect_IsEmpty()功能。

nm命令给了我这个输出:

另一方面,当我启动gdb并查看此函数的地址时,我得到:

谁能解释一下为什么这些地址不一样?gdb 从哪里得到这个地址?

0 投票
2 回答
7058 浏览

c++ - '_GLOBAL__sub_I_' 在 nm 输出中是什么意思?

当我试图解决静态链接中的问题时,我_GLOBAL__sub_I_在符号名称前遇到了几个前缀。尽管我使用了nm --demangle(-C).

我偶然发现了这个答案(如何找到全局静态初始化)。查看我的源代码,它确实看起来像是全局静态变量的初始化。

我想知道的是,我在哪里可以获取有关 __sub_ 和其他损坏名称的更多信息,例如__cxxabiv1

0 投票
1 回答
655 浏览

c - 当我使用 GNU nm 时,它不显示 __DTOR_LIST__

我有一个“大”问题。我目前正在尝试在 Linux 上的程序(它是一个虚拟机)中获取我的 dtor 列表的地址。显然有一个析构函数,但是当我使用 nm 并显示所有地址及其名称时,我找不到它;唯一与之相关的是do_global_dtors_aux。此外,当代码运行时,它按预期工作得非常好。这是我的一段代码:

这是我使用的时候nm