当前位置:首页 » 编程软件 » linux查看已编译符号

linux查看已编译符号

发布时间: 2023-05-29 10:49:31

linux 中怎样查看libxcb

nm [option(s)] [file(s)]
有用的options:
-A 在每个符号信息的前面打印所在对象文件名称;
-C 输出demangle过了的符号名称;
-D 打印动态符号;
-l 使用对象文件中的调试信息打印出所在源文件及行号;
-n 按照地址/符号值来排序;
-u 打印出那些未定义的符号;
常见的符号类型:
A 该符号的值在今后的链接中将不再改变;
B 该符号放在BSS段中,通常是那些未初始化的全局变量;
D 该符号放在普通的数据段中,通常是那些已经初始化的全局变量;
T 该符号放在代码段中,通常是那些全局非静态函数;
U 该符号未定义过,需要自其他对象文件中链接进来;
W 未明确指定的弱链接符号;同链接的其他对象文件中有它的定义就用上,否则就用一个系统特别指定的默认值。拿轮
注意几点:
-C 总是适用于c++编译出来的对象文件。还记得c++中有重载么?为了区分重载函数,c++编译器会将函数返回值/参数等信息附加到函数名称中去形成一个mangle过的符号,那用这个选项列出符号的时候,做一个逆操作,输出那些原始的、我们可理解的符号名称。
使用 -l 时,必须保证你的对象文件中带有符号调式信息,这一般要求你在编译的时候指定一个 -g 选项,见 Linux:Gcc。
使用nm前,最好先用Linux:File查看对象消神信文件所属处理器架构,然后再瞎做用相应交叉版本的nm工具。

⑵ 如何在linux下查看gcc生成的.s文件

Gcc最基本的用法是∶gcc [options] [filenames] 其中options就是编译器所需要的参数,filenames给出相关的文件名称。 -c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。 -o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。 -g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。 -O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。 -O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。 -Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。

⑶ 在linux内核及mole编译时, 什么时候决定一个符号的位置. 该符号是位于mole中还是kernel中.

你把一个函数编译到mole当中...加载该mole时,使用insmod命令插入模块,就是把mole到了kernel中...mole是动态加载的,不加载就没... 有点类似dll...

PS:
那我也不晓得了...
内核中存在的应该仅仅是入口...

⑷ 怎么查看linux的内核符号表

在内核中通过/proc/kallsyms获得符号的地址

Linux内核符号表/proc/kallsyms的形成过程
./scripts/kallsyms.c负责生成System.map
./kernel/kallsyms.c负责生成/proc/kallsyms
./scripts/kallsyms.c解析vmlinux(.tmp_vmlinux)生成kallsyms.S(.tmp_kallsyms.S),然后内核编译过程中将kallsyms.S(内核符号表)编入内核镜像uImage
内核启动后./kernel/kallsyms.c解析uImage形成/proc/kallsyms
/proc/kallsyms包含了内核中的函数符号(包括没有EXPORT_SYMBOL)、全局变量(用EXPORT_SYMBOL导出的全局变量)
如何将内核中的函数、全局变量、静态变量都导出到/proc/kallsyms

查看内核 使用 uname -a

⑸ Linux常用命令

常用的命令有好多啊,你刚开始学,不用特意的去记,用到什么学什么就好了。 当然非要列举,下面列举的100条,是来自网络经验上的。 希望对你有帮助。
Linux常用命令大全100条:
1,echo “aa” 》 test.txt 和 echo “bb” 》》 test.txt
//》将原文件清空,并且内容写入到文件中,》》将内容放到文件的尾部
2,chmod go+w -R /home/zhangy //给组用户和其他用户添加写的权限
3,tar -tzvf test.tar.gz //列出归档内容
4, -ah //查看文件列表大小
5, -sh //查看所有文件的大小总和
6,echo ‘1+2’|bc -l //数学运算
7,uname -a //查看linux内核等的一些信息
8,badblocks -s /dev/sda //坏道扫描时显示进度
9,time command //查看命令的运行时间
10,ls -lrt //按时间的倒序排序
11,rsync -P //同步时显示进度
12.history -c //清楚历史命令
13,cd - //返回上次目录
14,tree //显示目录树
15,umount -n /mnt/hda2 //强制卸载
16,echo ~/ //显示用户的home目录
17,echo $[5*5] //算术运算
18,echo $((5*5)) //算术运算
19,eval ls;ps aux|grep httpd //这二个命令都能执行
20,free -m //有MB为单位显示内存
21,uptime
//显示系统已经运行了多长时间,它依次显示下列信息:现在时间、系统已经运行了多长时间、目前有多少登陆用户、系统在过去的1分钟、5分钟和15分钟内的平均负载
22,加法运算
[root@krlcgcms01 mytest]# let a=34+3;
[root@krlcgcms01 mytest]# echo $a;
23,export //查看所有环境变量
24,echo $PATH //查看单个变量
25,cmp file1 file2 //文件内容比对
26,clear //清屏
27,echo 23423 |awk --re-interval ‘/[0-9]{3,}/’ //如果不加re-interval的话,不显示
28,cal //得到一个整齐的日历格式
29,wc -l //统计行数,wc -w 统计单词
30,echo “AaDCbd23” |tr “[A-Z]” “[a-z]” 大写变小写,echo “AaDCbdc23” |tr -c b-d =
将b-d之外的字符串替换成=
31,echo “ADSF” | iconv -f UTF8 -t GBK //把字符由utf8转成gbk
-f是from和简写,-t好像terminal的简写
32,cat -n file //内容的前面会显示行号
33,chattr +i file //只读,root用户也没法对其进行修改
34,lsattr file //查看文件属性
35,cat /etc/passwd |awk -F: ‘{print $1}’ //查看系统中所有用户
36,cat /etc/group //查看系统中所有的组
37,groups //查前当前用户所在的,所有组
38,usermod -g 组名 用户 //这种方式是覆盖的方式,用的时候要小心,如果用户A性于mysql usermod -g php
mysql这样的话只属于php了
39,usermod -G 组名 用户 //这种方式是增加的方式,如果用户A性于mysql usermod -g php
mysql这样的话,mysql就属于2个组了
40,bc //进入数学计算中去
41,umask 003 u权限是7,g权限是7,其他用户是4,也就是774,777-003=774
42,mkfs -t vfat /dev/hda6 //将移动硬盘里面的一个分区格式化成vfat格式
43,mount /dev/cdrom /media/cdrom //挂载cdrom
44,getent group 532 //通过组ID,来查找组信息
45,last //登录成功用户记录
46,lastb //登录不成功用户记录
47,mp -S /dev/sda2 //查看一下要备份/dev/sda2所要的容量
48,mp -0j -f /dev/hda2/sda2_bak.mp.bz2 /dev/sda2 //将sda2进行备份并压缩
49,restore -t -f /dev/hda2/sda2_bak.mp //查看备份信息
50,restore -r -f /dev/hda2/sda2_bak.mp //还原备份
51,fc-list //查看系统中安装的字体
52,find 。/ -type f -exec grep -q “root” {} ; -exec echo {} ;
//查找目录下文件所包涵的字符串
53,vmstat 5 //每5显示一下次系统信息,cpu,memory,i/o等
54,top 后 在shift + P 所占进程的排序显示
55,top 后 在shift + M 所占内存的排序显示
56,iptraf -g //查看各个接口的流量
57,ostat -d -x /dev/sda2 2 //用iostat查看磁盘/dev/sda2的磁盘i/o情况,每两秒刷新一次
58, paste -sd ‘|||n’ test //文件的每4行转换成1行,并用|隔开
59,lsof -i :22 //知道22端口现在运行什么程序
60,lsof -c abc //显示abc进程现在打开的文件
61,lsof -p 12 //看进程号为12的进程打开了哪些文件
63,route //查看路由信息
64,ifup //开启网卡
65,ifdown //关闭网卡
66,route del -net 172.168.0.0 netmask 255.255.0.0 dev eth0 //删除
172.168这个网段
67,route add -net 172.168.10.0 netmask 255.255.255.0 dev eth0 //增加一个路由
68,netstat -tunl //列出监听的网络服务端口
69,netstat -tun //列出已连接的网络服务端口
70,nmap -sP 172.30.4.0/24 //在这个网段内有多少用户在我的主机上操作,一个不错的安全检查工具
71,vgdisplay //查看系统中的可用空间
72,lvextend -L+20G /dev/tank/part1 //向part1这个分区增加20G的空间
73,lvresize -L-10G /dev/tank/part2 //向part2这个分区减少10G的空间
74,pvdisplay //查看磁盘信息
75,mplayer -loop 10 /mnt/song/music/花儿开了.mp3 //循环播放10遍
76,pacman -S firefox -nd //nd去掉依赖
77,wget -c //断点下载
78,chroot /mnt/ubuntu //改变根目录到/mnt/ubuntu
79,ctrl+a //命令行下,光标称动到开头
80,ctrl+e //命令行下,光标移动结尾
81,cut -d: -f 1-4 test //用:分割文件,取分割后的1-4列
82,file /home/zhangy/test.php //用于查看文件的一些基本信息
83,touch test.txt //创建一个空文件 text.txt
84,htpasswd -cbd /usr/local/nginx/conf/authfile //创建访问控制文件
85,df //查看磁盘空间,和当前的磁盘数
86,fdisk -l //查看所有磁盘数
87,alsamixer //进入后,m键可以实现静音
88,killall httpd //把所有httpd进程杀掉
89,killall -9 mysqld_safe //有些进程超级用户也停止不了,-9是强制删除
90,mirror /mysql //下载mysql目录
91,mirror -R /mysql //上传mysql目录
92,rmmod pcspkr //关掉tab提示音
93,modprobe pcspkr //开启tab提示音
94,gpasswd -a zhangy wheel //将zhangy这个用户添加到wheel这个组
95,dd if=/dev/zero of=/virtual/ubuntu.virt.img bs=1M count=4096
//创建一个4G的IMG镜像
96,lspic //显示pci设备
97,lsusb //显示usb设备
98,history | less //less根more有点像,感觉less用着更舒服点
99,ln -s //如果忘了-s就变成硬链接了
100,tar zxvf test.tar.gz -C /home/zhangy //将内容解压到指定目录

⑹ linux查看c++程序某个函数的反汇编会显示函数名吗

这个问题很复杂。这得看你的二进制程序是否包含这些信息。这得看 编译选项 有没有包含 -s 。-s选项会剔除不需要的符号名。

正式二进制发布的软件是可以没有这些信息的。对于静态链接后 函数名在c/c++ 语言执行的过程中是不需要的,它是通过内存地址 去访问 内存,数据和代码。函数名用于 编译过程 和链接过程。对于动太链接在程序执行过程由ld.so 通过变量名去 动态的链接到某些库的指定函数。动态链接的符号名不可剔除。

说到底就是二进制程序如果包含变量名,就会显示。

实例

main.c:

intaaa=10;
intmyfunc(){
return5;
}
intmain(){
intbbb=20;
aaa=20;
bbb=myfunc();
return0;
}
gcc-nostdlibmain.c-omain_with_symbols
gcc-nostdlibmain.c-omain_without_symbols

分别产生包含符号名 和不包含符号名的 可执行文件。

!122~/src/c_cpp%objmp-dmain_with_symbols|grepmyfunc
000000000040017c<myfunc>:
4001a5:e8d2ffffffcallq40017c<myfunc>
!123~/src/c_cpp%objmp-dmain_without_symbols|grepmyfunc
!124~/src/c_cpp1%

很明显使用 -s 选项后 很多符号信息丢失,反汇编中也不包含相关符号名。

⑺ 如何查看linux下so库里的符号

这昌纳个一般没有要求。一般/lib /usr/lib 其它的要看具体情况。。。 如果你是自己编译的应用程序,.so文首毕件一般就在安装目录下的lib目录中。者迅芹

⑻ linux系统在 vim编译器中,,,注释符/* - - - - - - -*/ 和 // 以及 # 都是什么意思啊有什么区别吗

//和#一样,都是注释只不过是单行注释。起始行号,结束行号。

/* ------*/ 这个可以注释几行,中间可以断行,两边是匹配的。

系统:Linux

多行注释

进入命令行模式-->将光标移动到要注释的第一行位置-->

按ctrl + v进入 visual block模式-->

按字母j或k(或者上下移动键)纵向选中需要注释的行-->

按大写字母I,进入插入模式-->

输入注释符号,例如##(需要添加几列就输入几个)-->

按esc键就注释多行了。

取消多行注释(删除注释):

进入命令行模式-->将光标移动到要取消注释的第一行第一列位置-->

按ctrl + v进入 visual block模式-->

按小写字母h或l横向选中列的个数,按小写字母j或k纵向选中行的个数(同样可以使用上下左右移动键)-->

按d键或者delete键就可多行取消注释。



(8)linux查看已编译符号扩展阅读:

注释符的作用:

C语言的注释符是以“/*”开头并以“*/”结尾的串。在“/*”和“*/”之间的即为注释。

程序编译时,不对注释作任何处理。注释可出现在程序中的任何位置。

注释用来向用户提示或解释程序的意义。

在调试程序中对暂不使用的语句也可用注释符括起来,使翻译跳过不做处理,待调试结束后再去掉注释符。

⑼ Linux 编译选项

  1. gcc -E source_file.c
    -E,只执行到预编译。直接输出预编译结果。

  2. gcc -S source_file.c
    -S,只执行到源代码到汇编代码的转换,输出汇编代码。

  3. gcc -c source_file.c
    -c,只执行到编译,输出目标文件。

  4. gcc (-E/S/c/) source_file.c -o output_filename
    -o, 指定输出文件名,可以配合以上三种标签使用。
    -o 参数可以被省略。这种情况下编译器将使用以下默认名称输出:
    -E:预编译结果将被输出到标准输出端口(通常是显示器)
    -S:生成名为source_file.s的汇编代码
    -c:生成名为source_file.o的目标文件。
    无标签情况:生成名为a.out的可执行文件。

  5. gcc -g source_file.c
    -g,生成供调试用的可执行文件,可以在gdb中运行。由于文件中包含了调试信息因此运行效率很低,且文件也大不少。
    这里可以用strip命令重新将文件中debug信息删除。这是会发现生成的文件甚至比正常编译的输出更小了,这是因为strip把原先正常编译中的一些额外信息(如函数名之类)也删除了。用法为 strip a.out

  6. gcc -s source_file.c
    -s, 直接生成与运用strip同样效果的可执行文件(删除了所有符号信息)。

  7. gcc -O source_file.c
    -O(大写的字母O),编译器对代码进行自动优化编译,输出效率更高的可执行文件。
    -O 后面还可以跟上数字指定优化级别,如:
    gcc -O2 source_file.c
    数字越大,越加优化。但是通常情况下,自动的东西都不是太聪明,太大的优化级别可能会使生成的文件产生一系列的bug。一般可选择2;3会有一定风险。

  8. gcc -Wall source_file.c
    -W,在编译中开启一些额外的警告(warning)信息。-Wall,将所有的警告信息全开。

  9. gcc source_file.c -L/path/to/lib -lxxx -I/path/to/include
    -l, 指定所使用到的函数库,本例中链接器会尝试链接名为libxxx.a的函数库。
    -L,指定函数库所在的文件夹,本例中链接器会尝试搜索/path/to/lib文件夹。
    -I, 指定头文件所在的文件夹,本例中预编译器会尝试搜索/path/to/include文件夹。

⑽ linux的常用命令有那些

linux常用命令(基础)

1. man 对你熟悉或不熟悉的命令提供帮助解释

eg:man ls 就可以查看ls相关的用法

注:按q键或者ctrl+c退出,在linux下可以使用ctrl+c终止当前程序运行。
2. ls 查看目录或者文件的属*,列举出任一目录下面的文件

eg: ls /usr/man

ls -l

a.d表示目录(directory),如果是一个”-”表示是文件,如果是l则表示是一个连接文件(link)

b.表示文件或者目录许可权限.分别用可读(r),可写(w),可运行(x)。

3. cp 拷贝文件

eg: cp filename1 filename2 //把filename1拷贝成filename2

cp 1.c netseek/2.c //将1.c拷到netseek目录下命名为2.c

4. rm 删除文件和目录

eg: rm 1.c //将1.c这个文件删除

5. mv 移走目录或者改文件名

eg: mv filename1 filename2 //将filename1 改名为filename2

mv qib.tgz ../qib.tgz //移到上一级目录

6. cd 改变当前目录 pwd 查看当前所在目录完整路径

eg: pwd //查看当前所在目录路径

cd netseek //进入netseek这个目录

cd //退出当前目录

7. cat,more命令

将某个文件的内容显示出来。两个命令所不同的是:cat把文件内容一直打印出来,而 more则分屏显示

eg; cat>1.c //就可以把代码粘帖到1.c文件里,按ctrl+d 保存代码。

cat 1.c 或more 1.c //都可以查看里面的内容。

gcc -o 1 1.c //将1.c编译成.exe文件,我们可以用此命编译出代码。

8.chmod 命令 权限修改 用法:chmod 一位8进制数 filename。

eg: chmod u+x filenmame //只想给自己运行,别人只能读

//u表示文件主人, g 表示文件文件所在组。 o 表示其他人 ;r 表可读,w 表可写,x 表可以运行

chmod g+x filename //同组的人来执行

9. clear,date命令

clear:清屏,相当与DOS下的cls;date:显示当前时间。

10. mount 加载一个硬件设备

用法:mount [参数] 要加载的设备 载入点

eg: mount /dev/cdrom

cd /mnt/cdrom //进入光盘目录

11. su 在不退出登陆的情况下,切换到另外一个人的身份

用法: su -l 用户名(如果用户名缺省,则切换到root状态)

eg:su -l netseek (切换到netseek这个用户,将提示输入密码)

12.whoami,whereis,which,id

//whoami:确认自己身份

//whereis:查询命令所在目录以及帮助文档所在目录

//which:查询该命令所在目录(类似whereis)

//id:打印出自己的UID以及GID。(UID:用户身份唯一标识。GID:用户组身份唯一标识。每一个用户只能有一个唯一的UID和 GID)

eg: whoami //显示你自已登陆的用户名

whereis bin 显示bin所在的目录,将显示为:/usr/local/bin

which bin

13. grep,find

grep:文本内容搜索;find:文件或者目录名以及权限属主等匹配搜索

eg: grep success * /*查找当前目录下面所有文件里面含有success字符的文件

14. kill 可以杀死某个正在进行或者已经是dest状态的进程

eg; ps ax

15. passwd 可以设置口令

16. history 用户用过的命令

eg: history //可以显示用户过去使用的命令

17. !! 执行最近一次的命令

18. mkdir命令

eg: mkdir netseek //创建netseek这个目录

19. tar 解压命令

eg: tar -zxvf nmap-3.45.tgz //将这个解压到nmap-3.45这个目录里

20. finger 可以让使用者查询一些其他使用者的资料

eg: finger //查看所用用户的使用资料

finger root //查看root的资料

热点内容
高级语言都要编译解析型语言 发布:2025-02-13 15:06:32 浏览:304
openwrt源码下载 发布:2025-02-13 15:01:59 浏览:644
linux删除一个目录 发布:2025-02-13 15:00:29 浏览:539
蚂蚁存储 发布:2025-02-13 15:00:25 浏览:918
脚本师传奇 发布:2025-02-13 14:45:48 浏览:481
我的世界lce服务器剪辑 发布:2025-02-13 14:40:50 浏览:625
phpsftp上传 发布:2025-02-13 14:35:43 浏览:274
c学生管理系统数据库 发布:2025-02-13 14:21:41 浏览:123
传奇添加会员脚本 发布:2025-02-13 14:20:50 浏览:206
微信开发平台源码 发布:2025-02-13 14:14:20 浏览:614