當前位置:首頁 » 編程軟體 » 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的資料

熱點內容
安卓手機如何無密碼解鎖vivo 發布:2025-02-13 15:52:10 瀏覽:884
電信50m上傳 發布:2025-02-13 15:47:56 瀏覽:363
清理outlook2010緩存 發布:2025-02-13 15:43:30 瀏覽:54
ohem演算法 發布:2025-02-13 15:40:10 瀏覽:930
java編程課程 發布:2025-02-13 15:36:08 瀏覽:475
cs編譯 發布:2025-02-13 15:36:07 瀏覽:55
高級語言都要編譯解析型語言 發布: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