Linux系统中有很多命令可以让我们更方便地管理和操作系统,其中一个非常常用的命令就是“nm”。nm命令是一个用于打印程序或目标文件中的符号表的工具,可以帮助我们了解程序的结构和调用关系。在本文中,我们将深入探究nm命令的原理和用法,希望能帮助读者更好地了解Linux系统。
一、nm命令的基本用法
nm命令用于查看程序或目标文件中的符号表,其基本用法如下:
nm [options] [file…]
其中,options是nm命令的一些选项,file是需要查看符号表的程序或目标文件。我们来看一个例子:
nm -A /usr/bin/ls
这个命令将会打印出/usr/bin/ls这个文件中的符号表,其中-A选项表示以十六进制的形式打印符号的地址。
二、nm命令的输出格式
使用nm命令,我们可以获得程序或目标文件中的符号表信息。这些符号可以分为三类:函数、变量和常量。我们来看一下nm命令的输出格式。
1. 函数
对于函数,nm命令会给出其地址以及在程序中的名称。例如:
080495a0 T _ZN8Greeting3sayEv
其中,080495a0是该函数的地址(在代码段中),T表示它是一个定义(即在程序中有对该函数的定义),_ZN8Greeting3sayEv是该函数在程序中的名称。
2. 变量
对于变量,nm命令会给出其地址以及在程序中的名称。例如:
08049ed8 B __bss_start

其中,08049ed8是该变量的地址(在数据段中),B表示它是一个BSS(Block Started by Symbol)段的变量(即该变量在程序中没有被初始化),__bss_start是该变量在程序中的名称。
3. 常量
对于常量,nm命令会给出其地址以及在程序中的名称。例如:
0804842c R isDebug
其中,0804842c是该常量的地址(在代码段中),R表示它是一个只读段的常量,isDebug是该常量在程序中的名称。
三、nm命令的一些选项
除了基本用法之外,nm命令还提供了一些选项,可以帮助我们更方便地获得符号表信息。
-A选项可以让nm命令以十六进制的形式打印符号的地址。例如:
nm -A /usr/bin/ls
这个命令将会以十六进制的形式打印出/usr/bin/ls文件中的符号表。
-a选项可以让nm命令打印所有符号,包括隐藏的和未定义的符号。例如:
nm -a /usr/bin/ls
这个命令将会打印出/usr/bin/ls文件中的所有符号,包括隐藏的和未定义的符号。
-l选项可以让nm命令打印每个符号的行号信息。例如:
nm -l /usr/bin/ls
这个命令将会打印出/usr/bin/ls文件中每个符号的行号信息。
-o选项可以让nm命令将符号按照名称排序。例如:
nm -o /usr/bin/ls
这个命令将会按照名称顺序打印出/usr/bin/ls文件中的所有符号。
-S选项可以让nm命令打印出每个符号的大小。例如:
nm -S /usr/bin/ls
这个命令将会打印出/usr/bin/ls文件中每个符号的大小。
四、
nm命令是一个非常实用的工具,可以帮助我们了解程序的结构和调用关系。本文介绍了nm命令的基本用法和输出格式,以及一些常用的选项,希望能够对读者在Linux系统中进行程序开发和调试提供帮助。
相关问题拓展阅读:
LinuxiP地址中 NM_CONTROLLED=YES 有什么用
NM_CONTROLLED=”团灶yes。NM_CONTROLLED是Network manger的参数,实时冲或晌生效,修改后无需要重启散锋网卡立即生效。
关于linux函数 nm的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
香港服务器首选树叶云,2H2G首月10元开通。树叶云(shuyeidc.com)提供简单好用,价格厚道的香港/美国云 服务器 和独立服务器。IDC+ISP+ICP资质。ARIN和APNIC会员。成熟技术团队15年行业经验。
如何在Linux操作系统下检测内存泄漏
Linux操作系统应用专区1.开发背景:在 Windows 下使用 VC 编程时,我们通常需要 DEBUG 模式下运行程序,而后调试器将在退出程序时,打印出程序运行过程中在堆上分配而没有释放的内存信息,其中包括代码文件名、行号以及内存大小。 该功能是 MFC Framework 提供的内置机制,封装在其类结构体系内部。 在 Linux 或者 Unix 下,我们的 C++ 程序缺乏相应的手段来检测内存信息,而只能使用 top 指令观察进程的动态内存总额。 而且程序退出时,我们无法获知任何内存泄漏信息。 为了更好的辅助在 linux 下程序开发,我们在我们的类库项目中设计并实现了一个内存检测子系统。 下文将简述 C++ 中的 new 和 delete 的基本原理,并讲述了内存检测子系统的实现原理、实现中的技巧,并对内存泄漏检测的高级话题进行了讨论。 2.New和delete的原理当我们在程序中写下 new 和 delete 时,我们实际上调用的是 C++ 语言内置的 new operator 和 delete operator。 所谓语言内置就是说我们不能更改其含义,它的功能总是一致的。 以 new operator 为例,它总是先分配足够的内存,而后再调用相应的类型的构造函数初始化该内存。 而 delete operator 总是先调用该类型的析构函数,而后释放内存(图1)。 我们能够施加影响力的事实上就是 new operator 和 delete operator 执行过程中分配和释放内存的方法。 new operator 为分配内存所调用的函数名字是 operator new,其通常的形式是 void * operator new(size_t size); 其返回值类型是 void*,因为这个函数返回一个未经处理(raw)的指针,未初始化的内存。 参数 size 确定分配多少内存,你能增加额外的参数重载函数 operator new,但是第一个参数类型必须是 size_t。 delete operator 为释放内存所调用的函数名字是 operator delete,其通常的形式是 void operator delete(void *memoryToBeDeallocated);它释放传入的参数所指向的一片内存区。 这里有一个问题,就是当我们调用 new operator 分配内存时,有一个 size 参数表明需要分配多大的内存。 但是当调用 delete operator 时,却没有类似的参数,那么 delete operator 如何能够知道需要释放该指针指向的内存块的大小呢?答案是:对于系统自有的数据类型,语言本身就能区分内存块的大小,而对于自定义数据类型(如我们自定义的类),则 operator new 和 operator delete 之间需要互相传递信息。 当我们使用 operator new 为一个自定义类型对象分配内存时,实际上我们得到的内存要比实际对象的内存大一些,这些内存除了要存储对象数据外,还需要记录这片内存的大小,此方法称为 cookie。 这一点上的实现依据不同的编译器不同。 (例如 MFC 选择在所分配内存的头部存储对象实际数据,而后面的部分存储边界标志和内存大小信息。 g++ 则采用在所分配内存的头 4 个自己存储相关信息,而后面的内存存储对象实际数据。 )当我们使用 delete operator 进行内存释放操作时,delete operator 就可以根据这些信息正确的释放指针所指向的内存块。 以上论述的是对于单个对象的内存分配/释放,当我们为数组分配/释放内存时,虽然我们仍然使用 new operator 和 delete operator,但是其内部行为却有不同:new operator 调用了operator new 的数组版的兄弟- operator new[],而后针对每一个数组成员调用构造函数。 而 delete operator 先对每一个数组成员调用析构函数,而后调用 operator delete[] 来释放内存。 需要注意的是,当我们创建或释放由自定义数据类型所构成的数组时,编译器为了能够标识出在 operator delete[] 中所需释放的内存块的大小,也使用了编译器相关的 cookie 技术。
如何开启windows10下的linux系统
linux命令是对Linux系统进行管理的命令。 对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与之前的DOS命令类似。 linux命令在系统中有两种类型:内置Shell命令和Linux命令。 以下是win10中使用linux命令的方法:1首先,点击屏幕左下角的Win图标,然后在弹出的菜单中选择“所有应用”。 2在所有应用中找到并展开 Windows PowerShell 文件夹,启动其下的 Windows PowerShell。 3这时,将会打开一个命令行窗口。 然后,请稍微等待一会,直到出现 PowerShell 命令提示符为止。 4这时,便可以输入 Linux 命令了。 例如,输入一个 Linux 文件查看命令 ls,回车,便可以列出当前目录下的文件和文件夹列表。 注意事项Windows PowerShell 支持绝大部分 Linux 内置命令,但有些命令例外。 具体来说有:1)命令简写(或称命令别名)例如,不支持 Linux 下的文件查看命令 ll 。 该命令作用为以详细信息方式查看当前目录下文件,它实质是 ls -l 命令的简写。 2)需要调用 linux 系统中的程序才能执行的命令,如 vim由于 Windows 系统中并没有内置 vim 程序,故而与 vim 有关的命令无法启用。 3)帮助命令在 Linux 系统中,如果要知道某条命令的用法,可以使用帮助命令了。 但在 Windows 中,默认是没有安装Linux中的帮助命令的。 如果想使用该命令,可以联网安装或在线查看。 模式切换1、 由图形到字符#logout或init 32、由字符到图形界面init 53、退出consolelogout或exit或ctrl+d4、 注销Ctrl + Alt + Backspace5、 关机#poweroff或init 0或shutdown -h now或 halt -p6、 重启#reboot或init 6或shutdown -r now
Mod在数学算法中是什么意思??
余数 (≡)同余一般来说就是取余数A≡B(Mod C) 就是说A除以C所的余数和B除以C所得的余数相同,换句话说 A-B能整除C可以表示C|A-B
发表评论