版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、實(shí)驗(yàn)1 Linux編程環(huán)境一實(shí)驗(yàn)?zāi)康恼莆仗摂M機(jī)VMWare的安裝、虛擬機(jī)下的Linux系統(tǒng)安裝和基本命令使用、Linux系統(tǒng)下的C程序編譯、運(yùn)行和調(diào)試方法以及首先工程文件Makefile的生成。二實(shí)驗(yàn)內(nèi)容1.虛擬機(jī)VMWare的安裝;2.虛擬機(jī)下安裝linux系統(tǒng)(以Fedoar Core 3.0為例);3. Linux系統(tǒng)下的C程序的編譯、運(yùn)行與調(diào)試。4. autoconf和automake生成Makefile三實(shí)驗(yàn)環(huán)境PC微機(jī)Windows 操作系統(tǒng)四實(shí)驗(yàn)步驟 1虛擬機(jī)WMWare 10.0安裝(1)、運(yùn)行VMware-workstation-full-10.0.0-1295980.exe
2、,打開VMware Workstation 10.0中文安裝向?qū)?;?)、接受許可協(xié)議中的條款; (3)、設(shè)置安裝類型,一般用戶 選擇典型安裝即可;(4)、設(shè)置VM安裝路徑,可以自行更改,西西默認(rèn)安裝C盤; (5)、軟件更新, 這個還是不要選擇好,產(chǎn)品自動更新沒必要,比較麻煩;(6)、幫助改善VMware Workstation,可以不選; (7)、VM虛擬機(jī)快捷方式;(8)、正式開始安裝 (9)、輸入你找到的序列號。安裝包中帶有注冊機(jī);(10)、安裝完成。 (11)、打開VMware Workstation 10.0中文版虛擬機(jī)。2.虛擬機(jī)WMWare中安裝Linux操作系統(tǒng)Fedora C
3、ore 10.0(1) 在啟動的VMWare界面中點(diǎn)擊主頁中的“+”圖標(biāo)或選擇“文件”菜單中的“新建虛擬機(jī)”項(xiàng),后選擇“自定義(高級)(C)”選項(xiàng),“下一步”中的選擇項(xiàng)默認(rèn)后,再“下一步”中選擇“稍后安裝系統(tǒng)(S)”,下一步客戶機(jī)操作系統(tǒng)選擇“Linux(L)”,版本選擇“Fedora”; (2) 下一步的“虛擬機(jī)名稱”可自定,這里取名為FedoraCore10,虛擬機(jī)位置可選,這里安裝在“D:MyVirtualMachinesFedoraCore10”目錄(這個目錄就是虛擬機(jī)LINUX操作系統(tǒng)的安裝目錄,系統(tǒng)安裝好后,備份這個目錄,以防系統(tǒng)以后無法啟動時可不用重裝,只要把這個備份目錄復(fù)制覆蓋
4、這個虛擬機(jī)的安裝目錄就可以了),下一步中處理器選擇使用缺省,繼續(xù)下一步后的內(nèi)存大小選擇可根據(jù)你機(jī)器所帶配置的內(nèi)存大小作調(diào)整,可以缺省選擇而進(jìn)入下一步的網(wǎng)絡(luò)連接,同樣默認(rèn)選擇再連續(xù)兩次下一步; (3) 選擇默認(rèn)的“創(chuàng)建新虛擬磁盤(V)”, “下一步”中最大磁盤大小默認(rèn)為20GB(在硬盤空間富裕的情況下,可加大該容量,以便在虛擬機(jī)LINUX中有較多的空間來存放操作系統(tǒng)外的其他應(yīng)用程序),“下一步”默認(rèn)虛擬機(jī)文件名稱,下一步中點(diǎn)擊“完成”,虛擬機(jī)設(shè)置基本完成; (4) 在虛擬機(jī)軟件VMware界面的“虛擬機(jī)(M)”菜單中點(diǎn)擊“設(shè)置”菜單項(xiàng)(或點(diǎn)擊界面中的“編輯虛擬機(jī)設(shè)置”),后面出現(xiàn)的界面“硬件”中
5、選“CD/DVD(IDE)”后,選中“使用ISO映像文件(M)”,并在“瀏覽”中選擇LINUX操作系統(tǒng)映像文件Fedora-20-i386-DVD.iso(這個文件可從網(wǎng)上下載或拷貝),“確定”后進(jìn)入準(zhǔn)備安裝LINUX操作系統(tǒng)Fedora 10.0;(5) 在虛擬機(jī)軟件VMware中點(diǎn)擊“開啟此虛擬機(jī)”進(jìn)入Fedora系統(tǒng)安裝; 用鼠標(biāo)點(diǎn)中安裝界面后,Windows界面失去鼠標(biāo),需要同時按鍵ALT 和CTRL鍵,WINDOWS才能重見鼠標(biāo)。通過鍵盤來來選擇“Install or update an existing system”出現(xiàn)如下界面,選擇“skip”,在點(diǎn)擊“next”; (6) 選
6、擇語言、鍵盤,下一步中選擇“是” (7) 機(jī)器名選擇默認(rèn),時區(qū)默認(rèn)(上海) (8) 給根用戶設(shè)置密碼、“下一步”后缺省設(shè)置再選“下一步”后選“將修改寫入磁盤”; (9) 按下面打勾方式選擇安裝的軟件,注意要選中“定制安裝”;(10) 在下面安裝的各軟件中,右邊打勾選擇(在“任選軟件包”中還可加選);(11) 下一步后進(jìn)入系統(tǒng)安裝的最后拷貝過程:3Linux操作系統(tǒng)基本命令的使用 這里列舉了部分常用的Linux命令,用于Linux命令行中運(yùn)行的涉及系統(tǒng)配置、文件(目錄)等操作:(1)系統(tǒng)信息命令:arch 顯示機(jī)器的處理器架構(gòu)(1) uname -m 顯示機(jī)器的處理器架構(gòu)(2) uname -r
7、 顯示正在使用的內(nèi)核版本 cat /proc/cpuinfo 顯示CPU info的信息 cat /proc/version 顯示內(nèi)核的版本 lspci -tv 羅列 PCI 設(shè)備 lsusb -tv 顯示 USB 設(shè)備 date 顯示系統(tǒng)日期 cal 2007 顯示2007年的日歷表 date 041217002007.00 設(shè)置日期和時間 - 月日時分年.秒 clock w 將時間修改保存到 BIOS (2)關(guān)機(jī) (系統(tǒng)的關(guān)機(jī)、重啟以及登出 ) shutdown -h now 關(guān)閉系統(tǒng)(1) init 0 關(guān)閉系統(tǒng)(2) telinit 0 關(guān)閉系統(tǒng)(3) shutdown -h hour
8、s:minutes & 按預(yù)定時間關(guān)閉系統(tǒng) shutdown -c 取消按預(yù)定時間關(guān)閉系統(tǒng) shutdown -r now 重啟(1) reboot 重啟(2) logout 注銷 (3)文件和目錄 cd /home 進(jìn)入 '/ home' 目錄' cd . 返回上一級目錄 cd ./. 返回上兩級目錄 cd 進(jìn)入個人的主目錄 cd user1 進(jìn)入個人的主目錄 cd - 返回上次所在的目錄 pwd 顯示工作路徑 ls 查看目錄中的文件 ls -F 查看目錄中的文件 ls -l 顯示文件和目錄的詳細(xì)資料 ls -a 顯示隱藏文件 ls *0-9* 顯示包含數(shù)字的
9、文件名和目錄名 mkdir dir1 創(chuàng)建一個叫做 'dir1' 的目錄' mkdir dir1 dir2 同時創(chuàng)建兩個目錄 mkdir -p /tmp/dir1/dir2 創(chuàng)建一個目錄樹 rm -f file1 刪除一個叫做 'file1' 的文件' rmdir dir1 刪除一個叫做 'dir1' 的目錄' rm -rf dir1 刪除一個叫做 'dir1' 的目錄并同時刪除其內(nèi)容 rm -rf dir1 dir2 同時刪除兩個目錄及它們的內(nèi)容 mv dir1 new_dir 重命名/移動 一個目錄 c
10、p file1 file2 復(fù)制一個文件 cp dir/* . 復(fù)制一個目錄下的所有文件到當(dāng)前工作目錄 cp -a /tmp/dir1 . 復(fù)制一個目錄到當(dāng)前工作目錄 cp -a dir1 dir2 復(fù)制一個目錄 ln -s file1 lnk1 創(chuàng)建一個指向文件或目錄的軟鏈接 ln file1 lnk1 創(chuàng)建一個指向文件或目錄的物理鏈接 (4) 文件搜索 find / -name file1 從 '/' 開始進(jìn)入根文件系統(tǒng)搜索文件和目錄 find / -user user1 搜索屬于用戶 'user1' 的文件和目錄 find /home/user1 -nam
11、e *.bin 在目錄 '/ home/user1' 中搜索帶有'.bin'結(jié)尾的文件 find /usr/bin -type f -atime +100 搜索在過去100天內(nèi)未被使用過的執(zhí)行文件 find /usr/bin -type f -mtime -10 搜索在10天內(nèi)被創(chuàng)建或者修改過的文件 find / -name *.rpm -exec chmod 755 '' ; 搜索以'.rpm' 結(jié)尾的文件并定義其權(quán)限 find / -xdev -name *.rpm 搜索以 '.rpm' 結(jié)尾文件,忽略光驅(qū)、捷
12、盤等可移動設(shè)備 locate *.ps 尋找以 '.ps' 結(jié)尾的文件 - 先運(yùn)行 'updatedb' 命令 whereis halt 顯示一個二進(jìn)制文件、源碼或man的位置 which halt 顯示一個二進(jìn)制文件或可執(zhí)行文件的完整路徑 (5) 掛載一個文件系統(tǒng) mount /dev/hda2 /mnt/hda2 掛載一個叫做hda2的盤-確定目錄'/mnt/hda2'已經(jīng)存在 umount /dev/hda2 卸載一個叫做hda2的盤-先從掛載點(diǎn)'/ mnt/hda2'退出 fuser -km /mnt/hda2 當(dāng)設(shè)備繁忙
13、時強(qiáng)制卸載 umount -n /mnt/hda2 運(yùn)行卸載操作而不寫入 /etc/mtab 文件- 當(dāng)文件為只讀或當(dāng)磁盤寫滿時非常有用 mount /dev/fd0 /mnt/floppy 掛載一個軟盤 mount /dev/cdrom /mnt/cdrom 掛載一個cdrom或dvdrom mount /dev/hdc /mnt/cdrecorder 掛載一個cdrw或dvdrom mount /dev/hdb /mnt/cdrecorder 掛載一個cdrw或dvdrom mount -o loop file.iso /mnt/cdrom 掛載一個文件或ISO鏡像文件 mount -t
14、vfat /dev/hda5 /mnt/hda5 掛載一個Windows FAT32文件系統(tǒng) mount /dev/sda1 /mnt/usbdisk 掛載一個usb 捷盤或閃存設(shè)備 (6) 磁盤空間 df -h 顯示已經(jīng)掛載的分區(qū)列表 ls -lSr |more 以尺寸大小排列文件和目錄 du -sh dir1 估算目錄 'dir1' 已經(jīng)使用的磁盤空間' du -sk * | sort -rn 以容量大小為依據(jù)依次顯示文件和目錄的大小 (7) 用戶和群組 groupadd group_name 創(chuàng)建一個新用戶組 groupdel group_name 刪除一個用戶組
15、 groupmod -n new_group_name old_group_name 重命名一個用戶組 useradd -c "Name Surname " -g admin -d /home/user1 -s /bin/bash user1 創(chuàng)建一個屬于 "admin" 用戶組的用戶 useradd user1 創(chuàng)建一個新用戶 userdel -r user1 刪除一個用戶 ( '-r' 排除主目錄) usermod -c "User FTP" -g system -d /ftp/user1 -s /bin/nolo
16、gin user1 修改用戶屬性 passwd 修改口令 passwd user1 修改一個用戶的口令 (只允許root執(zhí)行) chage -E 2005-12-31 user1 設(shè)置用戶口令的失效期限 pwck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的用戶 grpck 檢查 '/etc/passwd' 的文件格式和語法修正以及存在的群組 newgrp group_name 登陸進(jìn)一個新的群組以改變新創(chuàng)建文件的預(yù)設(shè)群組 (8) 文件的權(quán)限(使用 "+" 設(shè)置權(quán)限,使用 "-" 用于取消) ls -l
17、h 顯示權(quán)限 ls /tmp | pr -T5 -W$COLUMNS 將終端劃分成5欄顯示 chmod ugo+rwx directory1 設(shè)置目錄的所有人(u)、群組(g)以及其他人(o)以讀(r )、寫(w)和執(zhí)行(x)的權(quán)限 chmod go-rwx directory1 刪除群組(g)與其他人(o)對目錄的讀寫執(zhí)行權(quán)限 chown user1 file1 改變一個文件的所有人屬性 chown -R user1 directory1 改變一個目錄的所有人屬性并同時改變改目錄下所有文件的屬性 chgrp group1 file1 改變文件的群組 chown user1:group1 fi
18、le1 改變一個文件的所有人和群組屬性 chmod o-t /home/public 禁用一個目錄的 STIKY 位 (9) 文件的特殊屬性(使用 "+" 設(shè)置權(quán)限,使用 "-" 用于取消) chattr +a file1 只允許以追加方式讀寫文件 chattr +c file1 允許這個文件能被內(nèi)核自動壓縮/解壓 chattr +d file1 在進(jìn)行文件系統(tǒng)備份時,dump程序?qū)⒑雎赃@個文件 chattr +i file1 設(shè)置成不可變的文件,不能被刪除、修改、重命名或者鏈接 chattr +s file1 允許一個文件被安全地刪除 chattr +
19、S file1 一旦應(yīng)用程序?qū)@個文件執(zhí)行了寫操作,使系統(tǒng)立刻把修改的結(jié)果寫到磁盤 chattr +u file1 若文件被刪除,系統(tǒng)會允許你在以后恢復(fù)這個被刪除的文件 lsattr 顯示特殊的屬性 (10) 打包和壓縮文件 bunzip2 file1.bz2 解壓一個叫做 'file1.bz2'的文件 bzip2 file1 壓縮一個叫做 'file1' 的文件 gunzip file1.gz 解壓一個叫做 'file1.gz'的文件 gzip file1 壓縮一個叫做 'file1'的文件 gzip -9 file1 最大程度
20、壓縮 rar a file1.rar test_file 創(chuàng)建一個叫做 'file1.rar' 的包 rar a file1.rar file1 file2 dir1 同時壓縮 'file1', 'file2' 以及目錄 'dir1' rar x file1.rar 解壓rar包 unrar x file1.rar 解壓rar包 tar -cvf archive.tar file1 創(chuàng)建一個非壓縮的 tarball tar -cvf archive.tar file1 file2 dir1 創(chuàng)建包含了'file1'
21、, 'file2'以及'dir1'的檔案文件 tar -tf archive.tar 顯示一個包中的內(nèi)容 tar -xvf archive.tar 釋放一個包 tar -xvf archive.tar -C /tmp 將壓縮包釋放到 /tmp目錄下 tar -cvfj archive.tar.bz2 dir1 創(chuàng)建一個bzip2格式的壓縮包 tar -xvfj archive.tar.bz2 解壓一個bzip2格式的壓縮包 tar -cvfz archive.tar.gz dir1 創(chuàng)建一個gzip格式的壓縮包 tar -xvfz archive.tar.gz
22、解壓一個gzip格式的壓縮包 zip file1.zip file1 創(chuàng)建一個zip格式的壓縮包 zip -r file1.zip file1 file2 dir1 將幾個文件和目錄同時壓縮成一個zip格式的壓縮包 unzip file1.zip 解壓一個zip格式壓縮包 (11) RPM包(Fedora, Redhat及類似系統(tǒng)) rpm -ivh package.rpm 安裝一個rpm包 rpm -ivh -nodeeps package.rpm 安裝一個rpm包而忽略依賴關(guān)系警告 rpm -U package.rpm 更新一個rpm包但不改變其配置文件 rpm -F package.rp
23、m 更新一個確定已經(jīng)安裝的rpm包 rpm -e package_name.rpm 刪除一個rpm包 rpm -qa 顯示系統(tǒng)中所有已經(jīng)安裝的rpm包 rpm -qa | grep httpd 顯示所有名稱中包含 "httpd" 字樣的rpm包 rpm -qi package_name 獲取一個已安裝包的特殊信息 rpm -qg "System Environment/Daemons" 顯示一個組件的rpm包 rpm -ql package_name 顯示一個已經(jīng)安裝的rpm包提供的文件列表 rpm -qc package_name 顯示一個已經(jīng)安裝的r
24、pm包提供的配置文件列表 rpm -q package_name -whatrequires 顯示與一個rpm包存在依賴關(guān)系的列表 rpm -q package_name -whatprovides 顯示一個rpm包所占的體積 rpm -q package_name -scripts 顯示在安裝/刪除期間所執(zhí)行的腳本l rpm -q package_name -changelog 顯示一個rpm包的修改歷史 rpm -qf /etc/httpd/conf/httpd.conf 確認(rèn)所給的文件由哪個rpm包所提供 rpm -qp package.rpm -l 顯示由一個尚未安裝的rpm包提供的文
25、件列表 rpm -import /media/cdrom/RPM-GPG-KEY 導(dǎo)入公鑰數(shù)字證書 rpm -checksig package.rpm 確認(rèn)一個rpm包的完整性 rpm -qa gpg-pubkey 確認(rèn)已安裝的所有rpm包的完整性 rpm -V package_name 檢查文件尺寸、 許可、類型、所有者、群組、MD5檢查以及最后修改時間 rpm -Va 檢查系統(tǒng)中所有已安裝的rpm包- 小心使用 rpm -Vp package.rpm 確認(rèn)一個rpm包還未安裝 rpm2cpio package.rpm | cpio -extract -make-directories *b
26、in* 從一個rpm包運(yùn)行可執(zhí)行文件 rpm -ivh /usr/src/redhat/RPMS/arch/package.rpm 從一個rpm源碼安裝一個構(gòu)建好的包 rpmbuild -rebuild package_name.src.rpm 從一個rpm源碼構(gòu)建一個 rpm 包 (12) 查看文件內(nèi)容 cat file1 從第一個字節(jié)開始正向查看文件的內(nèi)容 tac file1 從最后一行開始反向查看一個文件的內(nèi)容 more file1 查看一個長文件的內(nèi)容 less file1 類似于 'more' 命令,但是它允許在文件中和正向操作一樣的反向操作 head -2 file
27、1 查看一個文件的前兩行 tail -2 file1 查看一個文件的最后兩行 tail -f /var/log/messages 實(shí)時查看被添加到一個文件中的內(nèi)容 (13)文本處理 grep Aug /var/log/messages 在文件 '/var/log/messages'中查找關(guān)鍵詞"Aug" grep Aug /var/log/messages 在文件'/var/log/messages'中查找以"Aug"開始的詞匯 grep 0-9 /var/log/messages 選擇 '/var/log/mes
28、sages' 文件中所有包含數(shù)字的行 grep Aug -R /var/log/* 在目錄 '/var/log' 及隨后的目錄中搜索字符串"Aug" sort file1 file2 排序兩個文件的內(nèi)容 sort file1 file2 | uniq 取出兩個文件的并集(重復(fù)的行只保留一份) sort file1 file2 | uniq -u 刪除交集,留下其他的行 sort file1 file2 | uniq -d 取出兩個文件的交集(只留下同時存在于兩個文件中的文件) (14) 字符設(shè)置和文件格式轉(zhuǎn)換 dos2unix filedos.txt
29、 fileunix.txt 將一個文本文件的格式從MSDOS轉(zhuǎn)換成UNIX unix2dos fileunix.txt filedos.txt 將一個文本文件的格式從UNIX轉(zhuǎn)換成MSDOS (15) 文件系統(tǒng)分析 badblocks -v /dev/hda1 檢查磁盤hda1上的壞磁塊 fsck /dev/hda1 修復(fù)/檢查hda1磁盤上linux文件系統(tǒng)的完整性 fsck.ext2 /dev/hda1 修復(fù)/檢查hda1磁盤上ext2文件系統(tǒng)的完整性 e2fsck /dev/hda1 修復(fù)/檢查hda1磁盤上ext2文件系統(tǒng)的完整性 e2fsck -j /dev/hda1 修復(fù)/檢查hd
30、a1磁盤上ext3文件系統(tǒng)的完整性 fsck.ext3 /dev/hda1 修復(fù)/檢查hda1磁盤上ext3文件系統(tǒng)的完整性 fsck.vfat /dev/hda1 修復(fù)/檢查hda1磁盤上fat文件系統(tǒng)的完整性 fsck.msdos /dev/hda1 修復(fù)/檢查hda1磁盤上dos文件系統(tǒng)的完整性 dosfsck /dev/hda1 修復(fù)/檢查hda1磁盤上dos文件系統(tǒng)的完整性 (16) 初始化一個文件系統(tǒng) mkfs /dev/hda1 在hda1分區(qū)創(chuàng)建一個文件系統(tǒng) mke2fs /dev/hda1 在hda1分區(qū)創(chuàng)建一個linux ext2的文件系統(tǒng) mke2fs -j /dev/h
31、da1 在hda1分區(qū)創(chuàng)建一個linux ext3(日志型)的文件系統(tǒng) mkfs -t vfat 32 -F /dev/hda1 創(chuàng)建一個 FAT32 文件系統(tǒng) fdformat -n /dev/fd0 格式化一個軟盤 mkswap /dev/hda3 創(chuàng)建一個swap文件系統(tǒng) (17) SWAP文件系統(tǒng) mkswap /dev/hda3 創(chuàng)建一個swap文件系統(tǒng) swapon /dev/hda3 啟用一個新的swap文件系統(tǒng) swapon /dev/hda2 /dev/hdb3 啟用兩個swap分區(qū) (18) 備份 dump -0aj -f /tmp/home0.bak /home 制作一個
32、 '/home' 目錄的完整備份 dump -1aj -f /tmp/home0.bak /home 制作一個 '/home' 目錄的交互式備份 restore -if /tmp/home0.bak 還原一個交互式備份 dd if=/dev/sda of=/tmp/file1 備份磁盤內(nèi)容到一個文件 dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一個將 MBR (Master Boot Record)內(nèi)容復(fù)制到軟盤的動作 dd if=/dev/fd0 of=/dev/hda bs=512 count=1 從已經(jīng)保存到軟盤的
33、備份中恢復(fù)MBR內(nèi)容 (19) 光盤 cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一個可復(fù)寫的光盤內(nèi)容 mkisofs /dev/cdrom > cd.iso 在磁盤上創(chuàng)建一個光盤的iso鏡像文件 mount -o loop cd.iso /mnt/iso 掛載一個ISO鏡像文件 (20) 網(wǎng)絡(luò)(以太網(wǎng)和WIFI無線) ifconfig eth0 顯示一個以太網(wǎng)卡的配置 ifup eth0 啟用一個 'eth0' 網(wǎng)絡(luò)設(shè)備 ifdown eth0 禁用一個 'eth0'
34、 網(wǎng)絡(luò)設(shè)備 ifconfig eth0 netmask 控制IP地址 ifconfig eth0 promisc 設(shè)置 'eth0' 成混雜模式以嗅探數(shù)據(jù)包 (sniffing) dhclient eth0 以dhcp模式啟用 'eth0' route -n show routing table route add -net 0/0 gw IP_Gateway configura default gateway route add -net netmask gw
35、 configure static route to reach network '/16' route del 0/0 gw IP_gateway remove static route echo "1" > /proc/sys/net/ipv4/ip_forward activate ip routing hostname show hostname of system 4. Linux程序設(shè)計(jì)及調(diào)試(1) C程序的編譯與運(yùn)行在windows下編輯一個名為HelloWorld.c程序如下(注意Linux下
36、的文件名的字符大小寫是不相同的):#include <stdio.h>main() printf(“Hello World!n”;編譯該程序: gcc o HelloWorld HelloWord.c運(yùn)行編譯等后的執(zhí)行文件(HelloWorld): ./HelloWorld 屏幕顯示:ello World!(2) C程序的GDB調(diào)試I 編輯源程序(注意下面源代碼中的空行也保留):tst.c#include <stdio.h>int func(int n)int sum=0,i;for(i=0; i<n; i+)sum+=i; return sum;main()in
37、t i; long result = 0;for(i=1; i<=100; i+)result += i;printf("result1-100 = %d n", result ); printf("result1-250 = %d n", func(250) );II 編譯生成執(zhí)行文件:rootlocalhost # gcc -g tst.c -o tst(注意必須有 g 參數(shù),否則執(zhí)行代碼無調(diào)試信息)III 使用GDB調(diào)試:rootlocalhost # gdb tst <- 啟動GDBGNU gdb Red Hat Linux (6.1
38、post-1.20040607.41rh)Copyright 2004 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warran
39、ty for GDB. Type "show warranty" for details.This GDB was configured as "i386-redhat-linux-gnu".Using host libthread_db library "/lib/tls/libthread_db.so.1". (gdb) 這時已處于GDB的調(diào)試環(huán)境,(gdb)提示符后可以用輸入調(diào)試命令,關(guān)于gd b調(diào)試命令,可在網(wǎng)上搜索,自行測試,本實(shí)驗(yàn)只對部分命令進(jìn)行驗(yàn)證:l 1 <- 字母l是命令(list的縮寫),后面數(shù)字1從第一行開
40、始例出原碼。1 #include <stdio.h>23 int func(int n)4 5 int sum=0,i;6 for(i=1; i<=n; i+)7 8 sum+=i;9 10 return sum;(gdb) l <- 這里命令l表示繼續(xù)顯示下面源代碼11 121314 main()15 16 int i;17 long result = 0;18 for(i=1; i<=100; i+)19 20 result += i;(gdb) <-這里回車表示重復(fù)上面命令,繼續(xù)顯示后面代碼21 2223 printf("result1-10
41、0 = %d n", result );24 printf("result1-250 = %d n", func(250) );25 26(gdb) break 16 <- 設(shè)置斷點(diǎn),在源程序第16行處(break 也可簡寫為b)。Breakpoint 1 at 0x8048496: file tst.c, line 16.(gdb) break func <- 設(shè)置斷點(diǎn),在函數(shù)func()入口處。Breakpoint 2 at 0x8048456: file tst.c, line 5.(gdb) info break <- 查看斷點(diǎn)信息。Nu
42、m Type Disp Enb Address What1 breakpoint keep y 0x08048496 in main at tst.c:162 breakpoint keep y 0x08048456 in func at tst.c:5(gdb) r <- 運(yùn)行程序,run命令簡寫Starting program: /root/tstBreakpoint 1, main () at tst.c:17 <- 在斷點(diǎn)處停住。17 long result = 0;(gdb) n <- 單條語句執(zhí)行,next命令簡寫。18 for(i=1; i<=100; i
43、+)(gdb) n20 result += i;(gdb) n18 for(i=1; i<=100; i+)(gdb) n20 result += i;(gdb) c <- 繼續(xù)運(yùn)行程序,continue命令簡寫。Continuing.result1-100 = 5050 <-程序輸出。 <-程序輸出回車換行(程序中的“n”)Breakpoint 2, func (n=250) at tst.c:55 int sum=0,i;(gdb) n6 for(i=1; i<=n; i+)(gdb) p i <- 打印變量i的值,print命令簡寫。$1 = 1239
44、8580 <-變量i的當(dāng)前值是隨機(jī)數(shù)(gdb) n8 sum+=i;(gdb) n6 for(i=1; i<=n; i+)(gdb) p sum$2 = 1 (gdb) n8 sum+=i;(gdb) p i$3 = 2(gdb) n6 for(i=1; i<=n; i+)(gdb) p sum$4 = 3(gdb)b t <- 查看函數(shù)堆棧。#0 func (n=250) at tst.c:5#1 0x080484e4 in main () at tst.c:24#2 0x400409ed in _libc_start_main () from /lib/libc.s
45、o.6(gdb) finish <- 退出函數(shù)。Run till exit from #0 func (n=250) at tst.c:50x080484e4 in main () at tst.c:2424 printf("result1-250 = %d n", func(250) );Value returned is $6 = 31375(gdb) c <- 繼續(xù)運(yùn)行。Continuing.result1-250 = 31375 <-程序輸出。 <-程序輸出回車換行(程序中的“n”)Program exited with code 026.
46、<-程序退出,調(diào)試結(jié)束。(gdb) q <- 退出gdb。rootlocalhost #(3) C程序的匯編級調(diào)試rootlocalhost # gcc -o tst tst.c <-產(chǎn)生的執(zhí)行文件沒有調(diào)試信息rootlocalhost # gdb tstGNU gdb Red Hat Linux (6.1post-1.20040607.41rh)Copyright 2004 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and yo
47、u arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-redhat-linux-gnu".(no debugging symbols
48、 found).Using host libthread_db library "/lib/tls/libthread_db.so.1".(gdb) l <-執(zhí)行l(wèi)命令,將看見下面的信息無法列出文件內(nèi)容No symbol table is loaded. Use the "file" command.(gdb)b main <-設(shè)置斷點(diǎn)在main函數(shù)入口Breakpoint 1 at 0x804839e(gdb) b func <-設(shè)置斷點(diǎn)在func函數(shù)入口Breakpoint 2 at 0x804836e(gdb) disas mai
49、n <-從main函數(shù)開始反匯編Dump of assembler code for function main:0x08048398 <main+0>: push %ebp0x08048399 <main+1>: mov %esp,%ebp0x0804839b <main+3>: sub $0x8,%esp0x0804839e <main+6>: and $0xfffffff0,%esp0x080483a1 <main+9>: mov $0x0,%eax0x080483a6 <main+14>: add $0xf,
50、%eax0x080483a9 <main+17>: add $0xf,%eax0x080483ac <main+20>: shr $0x4,%eax0x080483af <main+23>: shl $0x4,%eax0x080483b2 <main+26>: sub %eax,%esp0x080483b4 <main+28>: movl $0x0,0xfffffff8(%ebp)0x080483bb <main+35>: movl $0x1,0xfffffffc(%ebp)0x080483c2 <main+42&g
51、t;: cmpl $0x64,0xfffffffc(%ebp)0x080483c6 <main+46>: jg 0x80483d7 <main+63>0x080483c8 <main+48>: mov 0xfffffffc(%ebp),%eax0x080483cb <main+51>: lea 0xfffffff8(%ebp),%edx0x080483ce <main+54>: add %eax,(%edx)0x080483d0 <main+56>: lea 0xfffffffc(%ebp),%eax0x080483d3
52、<main+59>: incl (%eax)0x080483d5 <main+61>: jmp 0x80483c2 <main+42>0x080483d7 <main+63>: sub $0x8,%esp0x080483da <main+66>: pushl 0xfffffff8(%ebp)0x080483dd <main+69>: push $0x80484ec0x080483e2 <main+74>: call 0x80482b0 <_init+56>0x080483e7 <main+79
53、>: add $0x10,%esp0x080483ea <main+82>: sub $0x8,%esp0x080483ed <main+85>: push $0xfa0x080483f2 <main+90>: call 0x8048368 <func>0x080483f7 <main+95>: add $0x4,%esp0x080483fa <main+98>: push %eax0x080483fb <main+99>: push $0x80485000x08048400 <main+104&g
54、t;: call 0x80482b0 <_init+56>0x08048405 <main+109>: add $0x10,%esp0x08048408 <main+112>: leave0x08048409 <main+113>: ret0x0804840a <main+114>: nop0x0804840b <main+115>: nop-Type <return> to continue, or q <return> to quit-(gdb) disas func <-從func函數(shù)開
55、始反匯編Dump of assembler code for function func:0x08048368 <func+0>: push %ebp0x08048369 <func+1>: mov %esp,%ebp0x0804836b <func+3>: sub $0x8,%esp0x0804836e <func+6>: movl $0x0,0xfffffffc(%ebp)0x08048375 <func+13>: movl $0x1,0xfffffff8(%ebp)0x0804837c <func+20>: mov 0xfffffff8(%ebp),%eax0x0804837f <func+23>: cmp 0x8(%ebp),%eax0x080483
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 建筑與市政工程第三方質(zhì)量安全巡查的意義與作用
- 二零二五年度船舶配件五金采購合同范本6篇
- 2025版消防安全教育培訓(xùn)及演練驗(yàn)收合同3篇
- 石油工程師的工作總結(jié)
- 工業(yè)企業(yè)保安崗位職責(zé)
- 二零二五版衛(wèi)浴建材市場推廣與銷售合同3篇
- 二零二五版學(xué)生走讀課外實(shí)踐活動協(xié)議2篇
- 二零二五版水電站電力系統(tǒng)智能控制權(quán)轉(zhuǎn)讓協(xié)議3篇
- 2025版消防設(shè)備安裝及驗(yàn)收服務(wù)協(xié)議2篇
- 2025版專業(yè)園藝中心花卉種植與訂購合作協(xié)議3篇
- 全冊(教案)外研版(一起)英語四年級下冊
- 中國兒童幽門螺桿菌感染診治專家共識2022
- 安踏運(yùn)動品牌營銷策略研究
- 非哺乳期乳腺炎患者的護(hù)理
- 骨科抗菌藥物應(yīng)用分析報(bào)告
- 中職安全管理方案
- 百詞斬托福詞匯excel版本
- 高考寫作指導(dǎo)常見議論文論證方法知識梳理與舉例解析課件27張
- 玻璃反應(yīng)釜安全操作及保養(yǎng)規(guī)程
- 高中英語新課標(biāo)詞匯表(附詞組)
- 證券公司信用風(fēng)險(xiǎn)和操作風(fēng)險(xiǎn)管理理論和實(shí)踐中金公司
評論
0/150
提交評論