- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
那是我的代码:
int const const_global_init = 2;
int const const_global;
int global_init = 4;
int global;
static int static_global_init = 3;
static int static_global;
static int static_function(){
return 2;
}
double function_with_param(int a){
static int static_local_init = 3;
static int static_local;
return 2.2;
}
int main(){
}
我生成 main.o
并尝试理解 nm
输出。在我使用 nm main.o --printfile-name -a
之后,我得到了这个输出:
main.o:0000000000000000 b .bss
main.o:0000000000000000 n .comment
main.o:0000000000000004 C const_global
main.o:0000000000000000 R const_global_init
main.o:0000000000000000 d .data
main.o:0000000000000000 r .eh_frame
main.o:000000000000000b T function_with_param
main.o:0000000000000004 C global
main.o:0000000000000000 D global_init
main.o:0000000000000027 T main
main.o:0000000000000000 a main.c
main.o:0000000000000000 n .note.GNU-stack
main.o:0000000000000000 r .rodata
main.o:0000000000000000 t static_function
main.o:0000000000000000 b static_global
main.o:0000000000000004 d static_global_init
main.o:0000000000000004 b static_local.1733
main.o:0000000000000008 d static_local_init.1732
main.o:0000000000000000 t .text
我理解了第二和第三列,但是,我真的不知道第一列是什么,是地址还是大小?我知道一些关于 .bbs
、.comment
、.data
和 .text
段的想法,但它是什么 .eh_frame
、.note.GNU-stack
和 .rodata
?
最佳答案
... i really dont know what is in the first column, whether it is the address or size?
我的本地联机帮助页(来自 man nm
)说
DESCRIPTION
GNU nm lists the symbols from object files objfile.... If no object files are listed as arguments, nm assumes the file a.out.
For each symbol, nm shows:
· The symbol value, in the radix selected by options (see below), or hexadecimal by default.
也就是说,第一列是交易品种的“值(value)”。要理解这意味着什么,了解一些有关 ELF 和运行时链接器的知识会很有帮助,但通常它只是相关部分的偏移量。
了解一些关于 ELF 的东西也会对其他方面有所帮助:man elf
告诉我们 .rodata
部分是只读数据(即:常量值硬编码进入永不改变的程序。字符串文字可能会放在这里)。
.eh_frame
用于异常处理和其他调用堆栈帧元数据(搜索 eh_frame
的第一个结果是 this question)。
关于c - nm 输出的第一列是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36746688/
我正在使用以下命令 nm -B -l -r --size-sort --print-size binaryName| grep ' B ' 示例输出: 00000000166140e0 0000000
我有一个共享库 (libARWrapper.so),其中包含以下两个条目,使用 nm (nm -D --define-only libARWrapper.so) 显示 00075854 T Java_
我正在编译我的代码以创建一个共享库,并最终将它们链接到正确的库(共享库)。但是,当我使用“nm -u”查看我的共享库时,它显示未解析的符号,主要来自(libm.so 和 libstdc++.so)。我
nm 命令报告一个符号同时是 U 和 T。U 代表未定义,据我所知符号位于另一个库中,但 T 是什么意思? 0000018c T _myfunc 你 _myfunc 最佳答案 查看 nm(1) 的手册
我正在我的库中搜索特定符号: nm --undefined-only -A libcpprest.a | grep "error_category" 我得到: libcpprest.a:json.cp
只是为了给您一些背景信息,以下是我正在努力实现的目标:我在共享对象文件中嵌入了一个 const char*,以便在 .so 文件本身中有一个版本字符串。我正在做数据分析,这个字符串使我能够让数据知道是
我构建了一个名为 InterfaceLayer.so 的动态库。当我打电话时: > nm InterfaceLayer 作为输出,我得到一些如下所示的符号: 00000e28 T _Z5startv
那是我的代码: int const const_global_init = 2; int const const_global; int global_init = 4; int global; st
nm在二进制文件中列出符号的实用程序在其文档中没有包含任何关于它如何命名的解释或线索nm . 我想一些经验丰富的 UNIX 开发人员可以提供一些启发。 为什么是nm这样命名的实用程序? 最佳答案 它是
我正在阅读SQLite的grammar,并对以下段落有一些疑问。 // The name of a column or table can be any of the following: // %t
我长期以来一直使用 cygwin 的 nm 命令来满足我所有的 .lib 符号调试需求,但最近我想在 SO 答案中引用它,并意识到大多数 Windows 开发人员没有安装 cygwin。 那么微软相当
我声明了两个静态变量。一个是全局的,另一个是主函数的局部的。之后我做了nm a.out 输出: 0000000000000000 l O .data 0000000000000004 glo
nm 的输出中有很多系统变量,看起来像这样 N _CRT_MT _CRT_fmode _CRT_glob Dictionary::variable4 namespace1::variable1 __c
我的应用程序被 Apple 拒绝了,因为我的应用程序以某种方式使用了私有(private) API。苹果说我的应用使用 框架:'/System/Library/Frameworks/CoreFound
有没有什么方法可以在不使用 nm 或其他工具的情况下找到所有全局变量,这需要在 Windows 中安装? 我的想法是通过查看链接器 *.map 文件,使用 perl 脚本手动查找所有全局变量。这是一种
我有一个使用 g++ 构建的共享对象文件,如下所示。 g++ -shared -fPIC -lpthread -O1 -std=c++11 -c AOTelemetry.cpp -L /home -I
我正在使用 Suse gcc 编译器编译我的库(C 编程),然后生成该库的 nm 报告。我必须将该 nm 报告与以前的版本库进行比较,以检查当前版本库中存在和不存在的符号。 nm libxxx0.1.
我将拥有这个 LABVIEW 程序,我必须在其中迭代大型数组(而不是队列),因此我有兴趣尽可能加快它们的速度。 我想我听说过 OpenCV,当读取一个元素时,从中提取该元素的页面包含以下列元素。这意味
我有 2 个目标文件,它们应该是相似的,因为它们来自同一代码库的 2 个不同的编译时间。我想比较他们的 nm 输出。但是我不能,因为有很多名称修改。由于名称修改,结果似乎有所不同,但实际上并非如此。我
我现在正在研究 ELF 格式。我必须编写一个简单的 nm 函数(没有选项)。我已经在输出上打印符号的值和符号的名称。 这是 nm 输出: value type name
我是一名优秀的程序员,十分优秀!