问题标签 [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 回答
444 浏览

gcc - gcc 4.8.4 默认情况下是否静态链接数学库?

我无法解释 gcc 4.8.4 展示的以下行为。让我们将以下代码片段命名为pow_main.c.

我正在使用以下命令行编译程序:

请注意,我只是在编译 ( -c) 程序,而不是链接它。此外,所有编译器优化都被禁用 ( -O0)。如果我查看目标文件中包含的符号,我会发现:

在我看来,编译器似乎已经pow从库中静态地解析了对该方法的引用,或者使用一些内联代码math优化了调用。pow

  1. 为什么符号pow不存在于目标文件中?
  2. 链接器不负责解析外部引用,无论是静态的还是动态的?
  3. 目标文件中不应该存在未定义的 ( )U符号吗?powpow_main.o

平台详情如下:

编辑:似乎我的两个怀疑之一是正确的。gcc 已经预先计算了表达式并将其替换为常量。

现在的问题是,如何关闭这样的优化,即使在O0

0 投票
2 回答
540 浏览

c - gcc:编译为 BSS 的线程局部变量

我是新来的,并且在我的 Ubuntu 14.04 计算机上使用(版本 4.8.2)测试线程本地存储(TLS)类,具有 i686/32 位架构。gcc

在试图找出__thread关键字是否具有预期的效果时,我编译了这个简约的测试程序gcc test.c(没有错误或警告):

并使用该工具检查符号在目标代码中nm的存储类:i

结果是

这意味着它i被视为一个通用的全局未初始化变量(存储在 BSS 部分中)。根据man nm,线程局部存储变量是用字母表示的L,不是B

这里有什么问题?

这是一个nm问题还是一个真正的问题?

0 投票
3 回答
1017 浏览

c - 如何在 AIX 下查看可执行内容

我有一个关于可执行文件和 C 的问题。

如果您必须知道可执行文件的内容(每个 .c 文件在注释中的版本),但您只有可执行文件,那么您没有源代码。你如何进行?

我已经看到“nm”命令,用“cut”剪切我想要的东西,我可以在输出 .c 文件中使用,但我无法读取里面的版本,因为我没有源文件。我也看到了“objdump”命令,但我不能在 AIX 下尝试它(当然......)有没有等价的?objdump 有可能知道我想要什么吗?

感谢您的帮助和关注 :)

0 投票
1 回答
687 浏览

c++ - 按偏移量查找成员

我有一个(大)类和该类的偏移量。如何有效地找到在该偏移处定义的成员?

例子:

给定一个偏移量4并假设sizeof(int) == 4,我想得到'b'。

显然我不想在运行时这样做,所以我一直在玩nm,现在objdumpgdb一段时间了,但没有设法做到这一点。

0 投票
2 回答
36 浏览

linker - 使用 GNU nm 实用程序时跳过地址输出

有什么想法如何在通过 nm 输出时跳过地址输出?

以下是 nm 输出的摘录:

我想得到这个输出:

如何使用 git-bash 命令行完成此任务?我在 nm 实用程序中寻找了相应的选项,但在我看来没有这样的选项。

0 投票
1 回答
1758 浏览

gcc - 使用 `nm` 命令列出局部变量

我正在尝试使用nm命令从目标文件中提取信息以进行某种静态代码分析,其中我必须计算 C 代码中声明的变量和函数的数量。我已经阅读了 GNU Binutils 的文档。我可以在返回的符号表中找到在全局范围内声明的变量,nm但我找不到在本地范围内声明的变量。这是为什么?我怎样才能访问它?

nm除了我可以提取我想要的信息之外,还有其他方法吗?作为编译器,gcc 应该生成一个符号表供其使用。我可以通过任何 gcc 命令访问它吗?

0 投票
1 回答
775 浏览

linux - 显示共享库版本的 nm 输出不正确

我刚刚建立了一个共享库,但是当我使用 nm 命令查看依赖项时,输出如下

我不知道 的意思@@ZLIB_1.2.2,实际上构建 libgio 的命令是

wherelibz.so.1.2.8是我自己从源码构建的,放到 libgio-2.0.so.0.2701.0 的同一个目录下。和系统的libz(/usr/lib/libz.so)不是同一个版本

所以,我的问题是为什么nm输出@@zlibis 1.2.2, not 1.2.8@@ZLIB_1.2.2nm输出的含义是什么?

谢谢

0 投票
0 回答
428 浏览

c++ - 文本部分中的符号尚未定义

我已经使用 c++ 在 HP-UX 上构建了 xerces。它还构建了一些链接到 libxerces-c-3.1.sl 的可执行文件。在运行其中任何一个时,我收到符号未找到错误:

我执行了 nm 命令,它将符号显示为未定义。但是我也可以在文本部分看到 xercesc_3_1::XMLBigDecimal::getRawData() 。

有人可以帮我理解如果符号在文本部分中,它怎么可能是未定义的?还是我误解了什么?

编辑:在代码中我可以看到代码中的内联函数定义,所以为什么找不到符号是另一个问题:

0 投票
1 回答
562 浏览

macos - 用 nm 查找符号的文件偏移量

我正在尝试使用脚本修补程序。所以我需要一个符号的文件偏移量,

但是 nm 只打印内存中的地址,我怎样才能找到它的文件偏移量呢?

我在 Mac 上运行 nm

0 投票
0 回答
315 浏览

linux - 为什么平台之间nm的输出排序不同?

我有一个 elf 文件,我通过输入 nm -n elf.elf 在其上执行 nm,然后在两台不同的机器上得到以下输出:

软呢帽

Ubuntu

我已经在两台机器上显示了一小部分输出,我检查了语言环境并且它们看起来相同,什么会导致这两台机器上的输出顺序不同?

字母数字排序在两台机器上也给出了不同的顺序,为什么呢?

(注意:nm 版本是不同的,但是我不希望某种行为是特定于版本的..)