问题标签 [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.
gcc - gcc 4.8.4 默认情况下是否静态链接数学库?
我无法解释 gcc 4.8.4 展示的以下行为。让我们将以下代码片段命名为pow_main.c
.
我正在使用以下命令行编译程序:
请注意,我只是在编译 ( -c
) 程序,而不是链接它。此外,所有编译器优化都被禁用 ( -O0
)。如果我查看目标文件中包含的符号,我会发现:
在我看来,编译器似乎已经pow
从库中静态地解析了对该方法的引用,或者使用一些内联代码math
优化了调用。pow
- 为什么符号
pow
不存在于目标文件中? - 链接器不负责解析外部引用,无论是静态的还是动态的?
- 目标文件中不应该存在未定义的 ( )
U
符号吗?pow
pow_main.o
平台详情如下:
编辑:似乎我的两个怀疑之一是正确的。gcc 已经预先计算了表达式并将其替换为常量。
现在的问题是,如何关闭这样的优化,即使在O0
?
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
问题还是一个真正的问题?
c - 如何在 AIX 下查看可执行内容
我有一个关于可执行文件和 C 的问题。
如果您必须知道可执行文件的内容(每个 .c 文件在注释中的版本),但您只有可执行文件,那么您没有源代码。你如何进行?
我已经看到“nm”命令,用“cut”剪切我想要的东西,我可以在输出 .c 文件中使用,但我无法读取里面的版本,因为我没有源文件。我也看到了“objdump”命令,但我不能在 AIX 下尝试它(当然......)有没有等价的?objdump 有可能知道我想要什么吗?
感谢您的帮助和关注 :)
c++ - 按偏移量查找成员
我有一个(大)类和该类的偏移量。如何有效地找到在该偏移处定义的成员?
例子:
给定一个偏移量4
并假设sizeof(int) == 4
,我想得到'b'。
显然我不想在运行时这样做,所以我一直在玩nm
,现在objdump
有gdb
一段时间了,但没有设法做到这一点。
linker - 使用 GNU nm 实用程序时跳过地址输出
有什么想法如何在通过 nm 输出时跳过地址输出?
以下是 nm 输出的摘录:
我想得到这个输出:
如何使用 git-bash 命令行完成此任务?我在 nm 实用程序中寻找了相应的选项,但在我看来没有这样的选项。
gcc - 使用 `nm` 命令列出局部变量
我正在尝试使用nm
命令从目标文件中提取信息以进行某种静态代码分析,其中我必须计算 C 代码中声明的变量和函数的数量。我已经阅读了 GNU Binutils 的文档。我可以在返回的符号表中找到在全局范围内声明的变量,nm
但我找不到在本地范围内声明的变量。这是为什么?我怎样才能访问它?
nm
除了我可以提取我想要的信息之外,还有其他方法吗?作为编译器,gcc 应该生成一个符号表供其使用。我可以通过任何 gcc 命令访问它吗?
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
输出@@zlib
is 1.2.2
, not 1.2.8
?@@ZLIB_1.2.2
nm输出的含义是什么?
谢谢
c++ - 文本部分中的符号尚未定义
我已经使用 c++ 在 HP-UX 上构建了 xerces。它还构建了一些链接到 libxerces-c-3.1.sl 的可执行文件。在运行其中任何一个时,我收到符号未找到错误:
我执行了 nm 命令,它将符号显示为未定义。但是我也可以在文本部分看到 xercesc_3_1::XMLBigDecimal::getRawData() 。
有人可以帮我理解如果符号在文本部分中,它怎么可能是未定义的?还是我误解了什么?
编辑:在代码中我可以看到代码中的内联函数定义,所以为什么找不到符号是另一个问题:
macos - 用 nm 查找符号的文件偏移量
我正在尝试使用脚本修补程序。所以我需要一个符号的文件偏移量,
但是 nm 只打印内存中的地址,我怎样才能找到它的文件偏移量呢?
我在 Mac 上运行 nm
linux - 为什么平台之间nm的输出排序不同?
我有一个 elf 文件,我通过输入 nm -n elf.elf 在其上执行 nm,然后在两台不同的机器上得到以下输出:
软呢帽
Ubuntu
我已经在两台机器上显示了一小部分输出,我检查了语言环境并且它们看起来相同,什么会导致这两台机器上的输出顺序不同?
字母数字排序在两台机器上也给出了不同的顺序,为什么呢?
(注意:nm 版本是不同的,但是我不希望某种行为是特定于版本的..)