第一篇:lab2-用戶管理-學生版
用戶和用戶組管理
學習用戶和用戶組管理,完成如下練習,將你在學習這部分內容中遇到的問題,輔助截圖,以實驗報告的格式提交,注意,仍然是重點描述問題
另外一份資料《用戶管理-學生練習時發現的問題--學生版》,供大家思考,看看您是否能夠解答同學遇到的問題
新來一位員工tom,如何為tom在linux系統中添加一個合法身份?
存儲用戶信息的配置文件是什么?文件是如何組織的?
存儲用戶密碼的配置文件是什么?文件是如何組織的?
存儲用戶組信息的配置文件是什么?文件是如何組織的?
和用戶和用戶組管理相關的文件有哪些,主要作用是什么?
1.新建一個組group1,新建一個系統組group2
2.更改組group2的GID為103,更改組名為grouptest
3.刪除組grouptest
4.新建用戶user1,指定UID為777,目錄為/home/user1,初始組為group1,有效組為root,指定shell為/bin/bash
5.新建一個系統用戶(虛擬用戶)user2
6.查看用戶user1的組群,切換到user1,在主目錄下新建一個文件夾test1,再切換有效組(附屬組)為root,再新建文件夾test2
7.修改用戶user1的個人說明為This is a test
8.修改用戶密碼過期時間為2012-12-12
9.更改用戶user1的密碼為111111,鎖定用戶user1,并查看/etc/shadow中user1對應的信息的變化,用user1身份登錄系統
解鎖用戶user1,再用user1身份登錄系統
10.更改用戶主目錄/home/user1為/home/user1home
11.更改自己(stu)的相關信息,如電話號碼等
12.查看用戶root的相關信息
13.列出用戶user1的UID,GID等
14.使用passwd給user1用戶密碼凍結,用passwd查看user1相關信息,最后用passwd給
用戶user1解凍
第二篇:Bomb Lab實驗報告
課程實驗報告
課 程 名 稱:
計算機系統原理實驗 實 驗 名 稱:
Bomb Lab 專 業 班 級: 姓
名:
學
號:
完 成 時 間:
2017.4.19
一、實驗目的
熟悉匯編程序,學習gdb調試工具,熟悉并掌握函數調用過程中的棧幀結構的變化。
二、實驗環境
個人PC,Linux發行版本,終端,gdb調試工具。
三、實驗要求
1.本次實驗為熟悉匯編程序及其調試方法的實驗。
2.實驗內容包含2個文件bomb(可執行文件)和bomb.c(c源文件)。3.使用gdb工具反匯編出匯編代碼,結合c語言文件找到每個關卡的入口函數。
4.分析匯編代碼,找到在每個phase程序段中,引導程序跳轉到“explode_bomb”程序段的地方,并分析其成功跳轉的條件,以此為突破口尋找應該在命令行輸入何種字符通關。
5.本實驗一共有7個關卡,包括6個普通關卡和1個隱藏關卡。要求至少通過6個普通關卡。
四、實驗內容及操作步驟
(一)準備過程
1.解壓文件夾得到“bomb”,“bomb.c”,“README-bomblab.txt”以及“實驗基本內容與要求.txt”等文檔。查看“實驗基本內容與要求.txt”了解實驗內容與要求后打開bomb.c文件,編譯發現不能通過,代碼不完整,所以bomb.c文件只能用來作為參考。查看bomb.c文件發現控制密碼正確的6個函數分別為phase_1,phase_2,phase_3,phase_4,phase_5,phase_6,因此可以對bomb文件反匯編得到匯編文本,結合匯編文本與bomb.c文本進一步分析。
2.進入Ubuntu,將bom和bomb.c文檔復制到主文件目錄下,ctrl+alt+t打開終端,通過“objdump-d bomb > bomb.s”命令將可執行文件反匯編成bomb.s文件,并且可以通過“gdb-q bomb”進行調試。3.將bomb.c復制成文本后打開bomb.c查看匯編代碼并進一步分析。
(二)關卡分析
1.phase_1 phase_1匯編代碼及注釋如下: 08048f61
: 8048f61: 55 8048f62: 89 e5 8048f64: 83 ec 18 位的棧空間
8048f67: c7 44 24 04 5c a1 04
push %ebp mov %esp,%ebp
sub $0x18,%esp #開辟一個2
4movl $0x804a15c,0x4(%esp)#將0x804a15c存到%eap+4的位置,x/s 0x804a15c 得到 “We have to stand with our North Korean allies.” 8048f6e: 08 8048f6f: 8b 45 08 8048f72: 89 04 24 處的值存到%esp 8048f75: e8 31 00 00 00
test %eax,%eax
je 8048f83
call 8048fab mov 0x8(%ebp),%eax mov %eax,(%esp)
#將%ebp+8#%eax=0則跳出函數,否則跳到爆炸函數,可以看出,調用
call 80490d1
思路與分析:
nop nop nop nop nop nop nop nop 通過call 8048fab ,call 80490d1 由上面分析可知地址0x804a15c中存著正確的字符串,我們只要輸入相同的字符串就可以通過關卡。進入gdb,通過命令x/s 0x804a15c查看該字符串為:“We have to stand with our North Korean allies.” 所以phase_1的通關密碼為:“We have to stand with our North Korean allies.”通過 r 命令運行程序,輸入該字符串則通過第一關: 結論與心得: 通過分析匯編代碼,通過字符串比較函數 2.phase_2 phase_2匯編代碼及注釋如下: 08048d6a : 8048d6a: 55 push %ebp 8048d6b: 89 e5 mov %esp,%ebp 8048d6d: 56 push %esi 8048d6e: 53 push %ebx 8048d6f: 83 ec 30 sub $0x30,%esp 8048d72: 8d 45 e0 lea-0x20(%ebp),%eax 8048d75: 89 44 24 04 mov %eax,0x4(%esp)一個數字的地址放到%esp+4的位置 8048d79: 8b 45 08 mov 0x8(%ebp),%eax 8048d7c: 89 04 24 mov %eax,(%esp)8048d7f: e8 87 03 00 00 call 804910b #讀取六個數字 8048d84: 83 7d e0 00 cmpl $0x0,-0x20(%ebp)8048d88: 75 06 jne 8048d90 #0和-0x20(%ebp)比較,不相等就爆炸 8048d8a: 83 7d e4 01 cmpl $0x1,-0x1c(%ebp)8048d8e: 74 05 je 8048d95 #1和-0x1c(%ebp)比較,相等就跳過爆炸 8048d90: e8 3c 03 00 00 call 80490d1 #將第 8048d95: 8d 5d e8 lea-0x18(%ebp),%ebx #將第三個數字的地址傳到%ebx中,即現在%ebx中存著第三個數字的地址 8048d98: 8d 75 f8 lea-0x8(%ebp),%esi #將%ebx的地址傳到%esi,%esi用于待會的判斷結束條件,%ebx存的地址一直循環加4,循環直到%ebx的下一個地址是%esi就結束】 8048d9b: 8b 43 fc 二個數放到%eax寄存器中 8048d9e: 03 43 f8 第二個數和第一個數的和 8048da1: 39 03 8048da3: 74 05 cmp %eax,(%ebx) add-0x8(%ebx),%eax #計算mov-0x4(%ebx),%eax #將第je 8048daa #前兩個數的和與第三個數相比較,相等則跳過炸彈 8048da5: e8 27 03 00 00 8048daa: 83 c3 04 call 80490d1 8048dad: 39 f3 8048daf: 75 ea cmp %esi,%ebx jne 8048d9b #比較現在%esi和%ebx里面的值是否相等,不相等則循環,否則結束。其實兩個寄存器中存的都是地址,為的是保證只輸入6個數,因為當輸入第7個數時,%ebx=%esi 8048db1: 83 c4 30 8048db4: 5b 8048db5: 5e 8048db6: 5d 8048db7: c3 思路與分析: 通過call 804910b add $0x30,%esp pop %ebx pop %esi pop %ebp ret #釋放棧幀 存著第二個數字,依次類推。通過cmpl $0x0,-0x20(%ebp),jne 8048d90 和cmpl $0x1,-0x1c(%ebp),je 8048d95 知道第一個數字必須是0,第二個數字必須是1,否則就爆炸。命令lea-0x18(%ebp),%ebx初始化寄存器%ebx的值,將第三個數字的地址傳到%ebx中.lea-0x8(%ebp),%esi將%ebx的地址傳到%esi,%esi用于待會的判斷結束條件,%ebx存的地址一直循環加4,循環直到%ebx的下一個地址是%esi就結束,mov-0x4(%ebx),%eax將第二個數放到%eax寄存器中,add-0x8(%ebx),%eax計算第二個數和第一個數的和,cmp %eax,(%ebx),je 8048daa 前兩個數的和與第三個數相比較,相等則跳過炸彈。add $0x4,%ebx將%ebx的地址加4,現在%ebx中存著第四個數字的地址,之后%ebx一直加4,知道循環完6個數字。通過上面的分析知道,輸入的前兩個數字為0和1,后面的數字等于前面兩個數字的和。所以,這六個數字為Fibonacci數列的前六項。為0 1 1 2 3 5。輸入這6個數字可通過phase_2.結論與心得: 第二關需要弄懂棧幀結構的變化,通過add $0x4,%ebx將%ebx的地址加4,然后判斷前兩個數字的和與當前位置的數是否相等。結合第一個和第二個數字是0和1知道結果為0 1 1 2 3 5。 3.phase_3 phase_3匯編代碼及注釋如下: 08048ea1 : 8048ea1: 55 8048ea2: 89 e5 8048ea4: 83 ec 28 8048ea7: 8d 45 f0 個數的位置 push %ebp mov %esp,%ebp sub $0x28,%esp lea-0x10(%ebp),%eax #第二 8048eaa: 89 44 24 0c 8048eae: 8d 45 f4 個數的位置 8048eb1: 89 44 24 08 8048eb5: c7 44 24 04 3e a2 04 mov %eax,0xc(%esp) lea-0xc(%ebp),%eax #第一 mov %eax,0x8(%esp)movl $0x804a23e,0x4(%esp)#通過查看0x804a23e的內容,即x/s 0x804a23e,顯示為“%d %d”,提示輸入兩個整型數 8048ebc: 08 8048ebd: 8b 45 08 8048ec0: 89 04 24 8048ec3: e8 78 f9 ff ff <__isoc99_sscanf@plt> 在%eax里 8048ec8: 83 f8 01 8048ecb: 7f 05 #至少輸入2個數,否則爆炸 8048ecd: e8 ff 01 00 00 8048ed2: 83 7d f4 07 8048ed6: 77 6b call 80490d1 cmp $0x1,%eax jg 8048ed2 mov 0x8(%ebp),%eax mov %eax,(%esp)call 8048840 #isoc99標準輸入變量,應該是把輸入的數字個數存#第1個數大于7爆炸,所以,第一個數需要小于等于7 8048ed8: 8b 45 f4 mov-0xc(%ebp),%eax 將第一個數存到%eax中 8048edb: ff 24 85 a0 a1 04 08 jmp *0x804a1a0(,%eax,4) #p/x 跳轉至0x804a1a0+4*%eax(存放第一個數)中的內容所指的行數 *0x804a1a0+4*%eax 8048ee2: b8 00 00 00 00 8048ee7: eb 53 8048ee9: b8 00 00 00 00 8048eee: 66 90 mov $0x0,%eax jmp 8048f3c mov $0x0,%eax xchg %ax,%ax 8048ef0: eb 45 8048ef2: b8 00 00 00 00 5的時候跳到這里 8048ef7: eb 39 8048ef9: b8 00 00 00 00 4的時候跳到這里 8048efe: 66 90 8048f00: eb 2b 8048f02: b8 00 00 00 00 4的時候跳到這里 8048f07: eb 1f 8048f09: b8 00 00 00 00 2的時候跳到這里 8048f0e: 66 90 8048f10: eb 11 8048f12: b8 14 03 00 00 jmp 8048f37 mov $0x0,%eax #第一個數等于 jmp 8048f32 mov $0x0,%eax #第一個數等于 xchg %ax,%ax jmp 8048f2d mov $0x0,%eax #第一個數等于 jmp 8048f28 mov $0x0,%eax #第一個數等于 xchg %ax,%ax jmp 8048f23 mov $0x314,%eax #第一個數為0的時候跳到這里(p/x *0x804a1a0)首先x=778,最后第二個數等于147 8048f17: eb 05 #跳轉到 8048f1e 這一行 8048f19: b8 00 00 00 00 1的時候跳到這里 8048f1e: 2d 5a 03 00 00 8048f23: 05 ef 02 00 00 8048f28: 2d 16 02 00 00 8048f2d: 05 16 02 00 00 8048f32: 2d 16 02 00 00 8048f37: 05 16 02 00 00 8048f3c: 2d 16 02 00 00 sub $0x35a,%eax add $0x2ef,%eax sub $0x216,%eax add $0x216,%eax sub $0x216,%eax add $0x216,%eax sub $0x216,%eax #x=x-858 #x=x+751 #x=x-534 #x=x+534 #x=x-534 #x=x+534 #x=x-534 mov $0x0,%eax #第一個數等于jmp 8048f1e 8048f41: eb 0a #跳轉到 8048f4d 這一行 8048f43: e8 89 01 00 00 8048f48: b8 00 00 00 00 8048f4d: 83 7d f4 05 8048f51: 7f 05 jmp 8048f4d call 80490d1 #第一個數字需要小于等于5,否則爆炸 8048f53: 3b 45 f0 8048f56: 74 05 cmp-0x10(%ebp),%eax je 8048f5d #0,147;1-641;2,217; 3,-534; 4,0; 5,-534 call 80490d1 思路與分析: 觀察到指令movl $0x804a23e,0x4(%esp),通過查看0x804a23e的內容,即x/s 0x804a23e,顯示為“%d %d”,提示輸入兩個整型數。call 8048840 <__isoc99_sscanf@plt>,調用isoc99標準輸入變量,是把輸入的數字個數存在%eax里返回。通過cmp $0x1,%eax和jg 8048ed2 知道至少輸入2個數,否則爆炸。通過cmpl $0x7,-0xc(%ebp)和ja 8048f43 知道第一個數字小于等于7,由cmpl $0x5,-0xc(%ebp)和jg 8048f58 知道輸入的數字要小于等于5,所以輸入的數字范圍為0-5。jmp *0x804a1a0(,%eax,4)為switch分支結構,%eax存著輸入的數字的值,當輸入的數組是0的時候,查看*0x804a1a0的值,得到$1 = 0x8048f12,即跳轉到0x8048f12處。當輸入的數字為1-5時依次類推。得到的地址分別為: cmp-0x10(%ebp),%eax和je 8048f5d 即為判斷經過一系列運算后求的值是否與正確的值相等。通過分析匯編代碼,我們可以知道當輸入不同的x值,等到的y值如下: 當x=0時,y=788-858+751-534+534-534+534-534=147 當x=1時,y=-858+751-534+534-534+534-534=-641 當x=2時,y=751-534+534-534+534-534=217 當x=3時,x=-534+534-534+534-534=-534 當x=4時,x=534-534+534-534=0 當x=5時,x=-534+534-534=-534 所以可以輸入六組數據:0 147;1-641;2 217;3-534;4 0;5-534。隨便輸入一組都能通過炸彈。 結論與心得: 第三關主要用到了switch分支結構,根據輸如的不同數字跳轉到不同位置進行不同的運算,最后得到結果。首先分析輸入數字的范圍,然后通過判斷跳轉的位置來準確計算。 4.phase_4 phase_4匯編代碼及注釋如下: 08048e2e : 8048e2e: 55 push %ebp 8048e2f: 89 e5 8048e31: 83 ec 28 8048e34: 8d 45 f0 個數字 8048e37: 89 44 24 0c 8048e3b: 8d 45 f4 個數字 8048e3e: 89 44 24 08 8048e42: c7 44 24 04 3e a2 04 輸入x/s 0x804a23e 顯示為 8048e49: 08 8048e4a: 8b 45 08 8048e4d: 89 04 24 8048e50: e8 eb f9 ff ff <__isoc99_sscanf@plt> “%d %d” mov %esp,%ebp sub $0x28,%esp #開辟棧空間 lea-0x10(%ebp),%eax #第二 mov %eax,0xc(%esp)lea-0xc(%ebp),%eax #第一 mov %eax,0x8(%esp)movl $0x804a23e,0x4(%esp)#,提示輸入兩個整型數字 mov 0x8(%ebp),%eax mov %eax,(%esp)call 8048840 #標準輸入變量,將輸入的數字個數存在%eax中 cmp $0x2,%eax jne 8048e66 8048e55: 83 f8 02 8048e58: 75 0c #要求輸入2個數字,即輸入的數字個數不等于2則爆炸 8048e5a: 8b 45 f4 mov-0xc(%ebp),%eax #將第一個數放到%eax中 8048e5d: 85 c0 8048e5f: 78 05 test %eax,%eax js 8048e66 #判斷第一個數,如果是負數就爆炸,所以需要%eax>=0 8048e61: 83 f8 0e 8048e64: 7e 05 cmp $0xe,%eax jle 8048e6b #比較第一個數和14(0xe)的大小,如果%eax<=14,則繼續執行,否則爆炸 8048e66: e8 66 02 00 00 8048e6b: c7 44 24 08 0e 00 00 call 80490d1 #將0xe存到%esp+8 8048e72: 00 8048e73: c7 44 24 04 00 00 00 0x0存到%esp+4 8048e7a: 00 8048e7b: 8b 45 f4 8048e7e: 89 04 24 數存到%esp 8048e81: e8 da fc ff ff func4函數(遞歸函數)8048e86: 83 f8 01 y存放在%eax寄存器中 8048e89: 75 06 #y要等于1,否則爆炸 8048e8b: 83 7d f0 01 8048e8f: 74 0c #第二個數要等于1,否則爆炸 8048e91: 8d b4 26 00 00 00 00 8048e98: e8 34 02 00 00 8048e9d: c9 8048e9e: 66 90 8048ea0: c3 call 8048b60 func4匯編代碼及注釋如下: 08048b60 push %ebp mov %esp,%ebp sub $0x18,%esp #建立一個棧幀 lea 0x0(%esi,%eiz,1),%esi call 80490d1 cmpl $0x1,-0x10(%ebp)je 8048e9d jne 8048e91 cmp $0x1,%eax #函數的返回值call 8048b60 #將第一個 movl $0x0,0x4(%esp) #將 8048b66: 89 5d f8 8048b69: 89 75 fc 8048b6c: 8b 55 08 #%edx->x 8048b6f: 8b 45 0c #%eax->y=0x0=0 8048b72: 8b 5d 10 #%ebx->z=0xe=14 func4(x,y,z) mov %ebx,-0x8(%ebp)mov %esi,-0x4(%ebp)mov 0x8(%ebp),%edx mov 0xc(%ebp),%eax mov 0x10(%ebp),%ebx 8048b75: 89 d9 t的過程,#t=z 8048b77: 29 c1 8048b79: 89 ce 8048b7b: c1 ee 1f 邏輯右移31位 8048b7e: 8d 0c 0e #t=(z-y)>>31+(z-y)8048b81: d1 f9 #t=[(z-y)>>31+(z-y)]>>1 8048b83: 01 c1 #t=[(z-y)>>31+(z-y)]/2+y = mov %ebx,%ecx #計算臨時變量 sub %eax,%ecx #t=z-y mov %ecx,%esi #t=z-y shr $0x1f,%esi #t=(z-y)>>31,lea(%esi,%ecx,1),%ecx sar %ecx add %eax,%ecx(14>>31+14)/2+0=7 cmp %edx,%ecx #將7和x(第 8048b85: 39 d1 一個數)比較,即7-x 8048b87: 7e 17 #當7<=x就跳轉到 8048ba0 jle 8048ba0 否則繼續執行下一條指令 sub $0x1,%ecx #t=t-1 8048b89: 83 e9 01 if(7>x)8048b8c: 89 4c 24 08 t-1移到0x8(%esp),z=t-1 8048b90: 89 44 24 04 mov %ecx,0x8(%esp)#將 mov %eax,0x4(%esp)#y 8048b94: 89 14 24 8048b97: e8 c4 ff ff ff 8048b9c: 01 c0 結果存放到%eax中 8048b9e: eb 20 結束 8048ba0: b8 00 00 00 00 跳轉到這里,此時令y=0 8048ba5: 39 d1 8048ba7: 7d 17 mov %edx,(%esp)#x call 8048b60 #y=2*y,將 jmp 8048bc0 #mov $0x0,%eax #if(x>=7)時就 cmp %edx,%ecx jge 8048bc0 8048ba9: 89 5c 24 08 8048bad: 83 c1 01 8048bb0: 89 4c 24 04 8048bb4: 89 14 24 8048bb7: e8 a4 ff ff ff 8048bbc: 8d 44 00 01 #y=z*y+1,將結果存到%eax中 8048bc0: 8b 5d f8 #if(t==x)跳轉到這里 8048bc3: 8b 75 fc 8048bc6: 89 ec 8048bc8: 5d 8048bc9: c3 思路與分析: 首先分析phase_4匯編代碼。movl $0x804a23e,0x4(%esp)輸入x/s 0x804a23e 顯示為 “%d %d”,提示輸入兩個整型數字。call 8048840 mov-0x4(%ebp),%esi mov %ebp,%esp pop %ebp ret mov-0x8(%ebp),%ebxmov %ebx,0x8(%esp)add $0x1,%ecx #y=t+1 mov %ecx,0x4(%esp)mov %edx,(%esp) #x y=t+1 #z call 8048b60 任然要求輸入2個數字。通過mov-0xc(%ebp),%eax,test %eax,%eax,js 8048e66 知道第一個數為非負數。由cmp $0xe,%eax和jle 8048e6b 又可以知道第一個數字要小于等于14。之后分析func4函數,分別用%esp,0x4(%esp),%0x8(%esp)傳遞三個參數,設為x,y,z。參數y存儲在寄存器%eax中并作為最終的返回值,最終結果為1,也就是n的值;參數x和z存儲于寄存器%edx和%ebx中,并通堆棧指針來保存或改變(配合其他指令)。在func4中進一步縮小了第一個數字的范圍。現在需要第一個數字的范圍為7-14。通過分析func4匯編代碼,可以得到如下的c代碼: # #include } else{ } y=0;if(t==x)return y;z=t-1;func4();y=z*y; y=t+1; func4();y=2*y+1;# # # # # # } y=0;z=0xe;ret=func4();if(ret==1)printf(“m=%d,n=%dn”,x,ret)# return 0;# } 第二個數必須為1。經過分析可以有三組數。分別是: 8 1;9 1;11 1。任意輸入一組數就能通過關卡。 結論與心得: 這一關中在函數里調用了另外一個函數func4,func4函數中運用到了線性遞歸。通過分析匯編代碼可以寫出相應的c代碼,通過分析第一個數范圍在7-14,第二個數必須為1,結合c代碼可以得出結果。 5.phase_5 phase_5匯編代碼及注釋如下: 08048db8 : 8048db8: 55 8048db9: 89 e5 8048dbb: 56 8048dbc: 53 8048dbd: 83 ec 20 8048dc0: 8d 45 f0 8048dc3: 89 44 24 0c 個數 push %ebp mov %esp,%ebp push %esi push %ebx sub $0x20,%esp #開辟棧空間 lea-0x10(%ebp),%eax mov %eax,0xc(%esp) #第二 8048dc7: 8d 45 f4 8048dca: 89 44 24 08 個數 8048dce: c7 44 24 04 3e a2 04 輸入x/s 0x804a23e 顯示為 8048dd5: 08 8048dd6: 8b 45 08 8048dd9: 89 04 24 8048ddc: e8 5f fa ff ff <__isoc99_sscanf@plt> “%d %d” lea-0xc(%ebp),%eax mov %eax,0x8(%esp) #第一 movl $0x804a23e,0x4(%esp)#,提示輸入兩個整型數字 mov 0x8(%ebp),%eax mov %eax,(%esp)call 8048840 #將輸入的數字個數返回到%eax中 cmp $0x1,%eax jg 8048deb 8048de1: 83 f8 01 8048de4: 7f 05 #若輸入的數字個數大于1則跳轉,否則爆炸,所以至少輸入兩個數字 8048de6: e8 e6 02 00 00 8048deb: 8b 45 f4 8048dee: 83 e0 0f call 80490d1 “與” 0xf,這個操作可以只保留第一個數的二進制后四位(0“與”任何數都為0) 8048df1: 89 45 f4 mov %eax,-0xc(%ebp)#經過上面的操作后再把第一個數放回原來的位置(只保留二進制表示的后四位) 8048df4: 83 f8 0f 8048df7: 74 29 cmp $0xf,%eax je 8048e22 #比較,如果第一個數和0xf(1111)相等則爆炸,說明第一個數的二進制后四位不能為“1111”,否則爆炸 8048df9: b9 00 00 00 00 用來累加%eax,初始化為0 8048dfe: ba 00 00 00 00 循環次數,初始化為0 mov $0x0,%edx #%edx=0 ; mov $0x0,%ecx #%ecx=0 ; 8048e03: bb c0 a1 04 08 mov $0x804a1c0,%ebx # p *0x804a1c0=10,這個地址為數組的首地址,求的值為第一個元素的值,求數組元素:p *0x804a1c0@16={10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 13, 3, 9, 6, 5} 8048e08: 83 c2 01 從這里開始 8048e0b: 8b 04 83 mov(%ebx,%eax,4),%eaxadd $0x1,%edx #%edx=1,循環#%eax=(%ebx+4*%eax)=(0x804a1c0+4*%eax);%eax用來保存求出的數組中的某個值 8048e0e: 01 c1 #%ecx=%ecx+%eax 8048e10: 83 f8 0f 8048e13: 75 f3 cmp $0xf,%eax jne 8048e08 add %eax,%ecx#如果此時%eax(此時的數組元素值)不等于15,則繼續循環,否則執行下一語句 8048e15: 89 45 f4 在的元素值放回第一個數的位置??? 8048e18: 83 fa 0f 8048e1b: 75 05 cmp $0xf,%edx jne 8048e22 mov %eax,-0xc(%ebp)#將現#如果%edx不等于15,則爆炸,所以,要循環15次 8048e1d: 39 4d f0 cmp %ecx,-0x10(%ebp) #累加的結果 8048e20: 74 05 #判斷第二個數的值 8048e22: e8 aa 02 00 00 8048e27: 83 c4 20 8048e2a: 5b 8048e2b: 5e 8048e2c: 5d call 80490d1 je 8048e27 8048e2d: c3 思路與分析: ret movl $0x804a23e,0x4(%esp)仍然提示輸入兩個整型數字,and $0xf,%eax第一個數 “與” 0xf,這個操作可以只保留第一個數的二進制后四位(0“與”任何數都為0)。mov %eax,-0xc(%ebp)經過上面的操作后再把第一個數放回原來的位置(只保留二進制表示的后四位)。cmp $0xf,%eax和je 8048e22 比較,如果第一個數和0xf(1111)相等則爆炸,說明第一個數的二進制后四位不能為“1111”,否則爆炸。mov $0x804a1c0,%ebx這個地址為數組的首地址,求的值為第一個元素的值。求數組元素:p *0x804a1c0@16={10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 13, 3, 9, 6, 5} 通過分析匯編代碼可以推出如下c代碼: # p *0x804a1c0@16={10, 2, 14, 7, 8, 12, 15, 11, 0, 4, 1, 13, 3, 9, 6, 5} # sum=0;# for(i=1;n!=15;i++){ # # # } # if(i==15)# return sum;n=a[n];sum+=n;n最后需要等于15,采用逆推的方法可以知道從開始到最后n的值分別為(因為開始循環之前取了一個n,所以總的有16個n):5,12,3,7,11,13,9,4,8,0,10,1,2,14,6,15、也就是說需要一開始傳進去的值為5,循環15次后得到的元素值才為15。只要用戶輸入的第一位數的二進制的后四位是0101(5),則可以通過,所以第一個數有無窮多個。第二個數累加的結果為12+3+7+11+13+9+4+8+0+10+1+2+14+6+15=115。 所以兩個數為 5 和 115。用戶輸入第一個數二進制下的后四位為0101(即第一個n=5),而之前位可以隨意取值。因此有無數多的密碼。如5 115;21 115等。隨意輸入一組即可通過關卡。 結論與心得: 這一關用到了循環鏈表,可以通過逆推的方法找到輸入的第一個數字是什么,然后根據c代碼確定累加的和。 6.phase_6 phase_6匯編代碼及注釋如下: 08048c89 : 8048c89: 55 8048c8a: 89 e5 8048c8c: 57 8048c8d: 56 8048c8e: 53 8048c8f: 83 ec 5c 間 8048c92: 8d 45 d0 8048c95: 89 44 24 04 8048c99: 8b 45 08 8048c9c: 89 04 24 8048c9f: e8 67 04 00 00 #輸入六個數 mov $0x0,%esi #%esi=0 lea-0x30(%ebp),%eax mov %eax,0x4(%esp)mov 0x8(%ebp),%eax mov %eax,(%esp)call 804910b push %ebp mov %esp,%ebp push %edi push %esi push %ebx sub $0x5c,%esp #開辟一個棧空 8048ca4: be 00 00 00 00 8048ca9: 8d 7d d0 lea-0x30(%ebp),%edi #指明的是當前數字,將第一個數的地址傳遞給%edi 8048cac: 8b 04 b7 將第一個數字給%eax,開始外層循環 sub $0x1,%eax #%eax--cmp $0x5,%eax jbe 8048cbc mov(%edi,%esi,4),%eax # 8048caf: 83 e8 01 8048cb2: 83 f8 05 8048cb5: 76 05 #%eax小于等于5則跳過炸彈,說明當前數字要小于等于6,又因為是無符號的比較(jbe),所以還需要當前數字大于等于1,也就是當前數字只能取1,2,3,4,5,6 8048cb7: e8 15 04 00 00 8048cbc: 83 c6 01 #%esi=%esi+1=1 8048cbf: 83 fe 06 8048cc2: 74 22 cmp $0x6,%esi je 8048ce6 call 80490d1 lea(%edi,%esi,4),%ebx #將當前數放到%ebx中 8048cc7: 89 75 b4 將%esi放到%ebp-4c中 8048cca: 8b 44 b7 fc mov-0x4(%edi,%esi,4),%eaxmov %esi,-0x4c(%ebp)##將前一個數放到%eax中,開始內層循環 8048cce: 3b 03 8048cd0: 75 05 cmp(%ebx),%eax jne 8048cd7 #比較當前數和前一個數,如果不相等則跳轉到8048cd7,否則爆炸,所以前后兩個數不能相等。 8048cd2: e8 fa 03 00 00 8048cd7: 83 45 b4 01 循環條件每次加1 call 80490d1 # 8048cdb: 83 c3 04 到下一個數 8048cde: 83 7d b4 05 8048ce2: 7e e6 add $0x4,%ebx #地址加4,即 cmpl $0x5,-0x4c(%ebp)jle 8048cca #小于等于5跳轉到8048cca,繼續內層循環,所以esi從0到5,需要循環6次,8048ce4: eb c6 #繼續外層循環,跳到8048cac #從上面兩個循環可以看出,外層循環要求輸入的6個數要在0~6之間,內層循環要求兩個相鄰的數不能相同 8048ce6: bb 00 00 00 00 跳到此處,%ebx=0 8048ceb: 8d 7d d0 一個數的地址放到%edi中 8048cee: eb 16 #跳轉到8048d06 8048cf0: 8b 52 08 數組第一個元素大于1,就跳轉到這里 8048cf3: 83 c0 01 8048cf6: 39 c8 8048cf8: 75 f6 #如果%eax不等于%ecx,則繼續循環 8048cfa: 89 54 b5 b8 mov %edx,-0x48(%ebp,%esi,4)add $0x1,%eax #%eax=1 cmp %ecx,%eax jne 8048cf0 mov 0x8(%edx),%edx #如果 jmp 8048d06 lea-0x30(%ebp),%edi #將第mov $0x0,%ebx #%esi等于6時jmp 8048cac #如果數組第一個元素等于1,就跳轉到這里, 8048cfe: 83 c3 01 8048d01: 83 fb 06 8048d04: 74 16 add $0x1,%ebx #%ebx=%ebx+1 cmp $0x6,%ebx je 8048d1c #如果%ebx=6,就跳轉到8048d1c 8048d06: 89 de mov %ebx,%esi #%esi=0 8048d08: 8b 0c 9f 將數組第一個元素放到%ecx中 8048d0b: ba c4 c0 04 08 mov(%edi,%ebx,4),%ecx #mov $0x804c0c4,%edx #將地址0x804c0c4放到%edx中,p/x *0x804c0c4=0x1a7 8048d10: b8 01 00 00 00 8048d15: 83 f9 01 8048d18: 7f d6 mov $0x1,%eax #%eax=1 cmp $0x1,%ecx jg 8048cf0 #如果數組第一個元素大于1,就跳轉到8048cf0 8048d1a: eb de jmp 8048cfa #如果數組第一個元素等于1,就跳轉到8048cfa 8048d1c: 8b 5d b8 mov-0x48(%ebp),%ebx #重新排列鏈表的值 #n[0] 8048d1f: 8b 45 bc 8048d22: 89 43 08 #n[0]+8=n[1] 8048d25: 8b 55 c0 8048d28: 89 50 08 #n[1]+8=n[2] 8048d2b: 8b 45 c4 8048d2e: 89 42 08 #n[2]+8=n[3] 8048d31: 8b 55 c8 8048d34: 89 50 08 #n[3]+8=n[4] 8048d37: 8b 45 cc 8048d3a: 89 42 08 #n[4]+8=n[5] 8048d3d: c7 40 08 00 00 00 00 表的值進行檢測 movl $0x0,0x8(%eax) #對鏈 mov-0x34(%ebp),%eax mov %eax,0x8(%edx)mov-0x38(%ebp),%edx mov %edx,0x8(%eax)mov-0x3c(%ebp),%eax mov %eax,0x8(%edx)mov-0x40(%ebp),%edx mov %edx,0x8(%eax)mov-0x44(%ebp),%eax mov %eax,0x8(%ebx)8048d44: be 00 00 00 00 8048d49: 8b 43 08 8048d4c: 8b 13 8048d4e: 3b 10 8048d50: 7d 05 mov $0x0,%esi mov 0x8(%ebx),%eax mov(%ebx),%edx cmp(%eax),%edx jge 8048d57 #第二個元素大一第一個元素就跳過炸彈,所以需要降序排列 8048d52: e8 7a 03 00 00 8048d57: 8b 5b 08 8048d5a: 83 c6 01 8048d5d: 83 fe 05 8048d60: 75 e7 call 80490d1 jne 8048d49 #數組中的每個元素都要滿足降序排列 8048d62: 83 c4 5c 8048d65: 5b 8048d66: 5e 8048d67: 5f 8048d68: 5d 8048d69: c3 思路與分析: call 804910b add $0x5c,%esp #釋放棧空間 pop %ebx pop %esi pop %edi pop %ebp ret mov(%edi,%esi,4),%eax #將第一個數字給%eax,開始外層循環 sub $0x1,%eax #%eax--cmp $0x5,%eax jbe 8048cbc 8048caf: 83 e8 01 8048cb2: 83 f8 05 8048cb5: 76 05 #%eax小于等于5則跳過炸彈,說明當前數字要小于等于6,又因為是無符號的比較(jbe),所以還需要當前數字大于等于1,也就是當前數字只能取1,2,3,4,5,6 8048cb7: e8 15 04 00 00 call 80490d1 add $0x1,%esi #%esi=%esi+1=1 cmp $0x6,%esi je 8048ce6 #如果此時%esi等于6,則跳轉到8048ce6,否則繼續執行下一條指令 8048cc4: 8d 1c b7 前數放到%ebx中 8048cc7: 89 75 b4 到%ebp-4c中 8048cca: 8b 44 b7 fc mov-0x4(%edi,%esi,4),%eax #mov %esi,-0x4c(%ebp)#將%esi放lea(%edi,%esi,4),%ebx #將當將前一個數放到%eax中,開始內層循環 8048cce: 3b 03 8048cd0: 75 05 cmp(%ebx),%eax jne 8048cd7 #比較當前數和前一個數,如果不相等則跳轉到8048cd7,否則爆炸,所以前后兩個數不能相等。 8048cd2: e8 fa 03 00 00 8048cd7: 83 45 b4 01 條件每次加1 8048cdb: 83 c3 04 一個數 8048cde: 83 7d b4 05 8048ce2: 7e e6 cmpl $0x5,-0x4c(%ebp) jle 8048cca #add $0x4,%ebx #地址加4,即到下call 80490d1 #循環小于等于5跳轉到8048cca,繼續內層循環,所以esi從0到5,需要循環6次,8048ce4: eb c6 繼續外層循環,跳到8048cac 這一段代碼是一個嵌套的for循環,得出的結果是輸入的6個數字為1-6之間的數字且相鄰兩個數字不能相等。 mov $0x0,%ebx #%esi等于6時跳到此處,%ebx=0 jmp 8048cac # 8048ceb: 8d 7d d0 數的地址放到%edi中 8048cee: eb 16 跳轉到8048d06 8048cf0: 8b 52 08 第一個元素大于1,就跳轉到這里 8048cf3: 83 c0 01 8048cf6: 39 c8 8048cf8: 75 f6 如果%eax不等于%ecx,則繼續循環 8048cfa: 89 54 b5 b8 lea-0x30(%ebp),%edi #將第一個 jmp 8048d06 #mov 0x8(%edx),%edx #如果數組 add $0x1,%eax #%eax=1 cmp %ecx,%eax jne 8048cf0 #mov %edx,-0x48(%ebp,%esi,4)#如果數組第一個元素等于1,就跳轉到這里, 8048cfe: 83 c3 01 8048d01: 83 fb 06 8048d04: 74 16 如果%ebx=6,就跳轉到8048d1c 8048d06: 89 de 8048d08: 8b 0c 9f 組第一個元素放到%ecx中 8048d0b: ba c4 c0 04 08 mov $0x804c0c4,%edx #將地址mov %ebx,%esi #%esi=0 mov(%edi,%ebx,4),%ecx #將數 add $0x1,%ebx #%ebx=%ebx+1 cmp $0x6,%ebx je 8048d1c #0x804c0c4放到%edx中,p/x *0x804c0c4=0x1a7 8048d10: b8 01 00 00 00 8048d15: 83 f9 01 8048d18: 7f d6 mov $0x1,%eax #%eax=1 cmp $0x1,%ecx jg 8048cf0 #如果數組第一個元素大于1,就跳轉到8048cf0 8048d1a: eb de jmp 8048cfa #如果數組第一個元素等于1,就跳轉到8048cfa 這又是一個嵌套的for循環,根據用戶輸入的值來對鏈表的值進行排序,比如給出值 5 6 1 4 3 2,則將原來鏈表第 5個位置的值放到第1位,第6個位置的值放到第二位,依次類推。而下面檢測鏈表值時,要求鏈表值按從大到小排列。通過指令查看鏈表的值為;#p/x *0x804c0c4=0x1a7 #p/x *0x804c0cc=0x804c0b8 #p/x *0x804c0b8=0x6c #p/x *0x804c0c0=0x804c0ac #p/x *0x804c0ac=0x155 #p/x *0x804c0b4=0x804c0a0 #p/x *0x804c0a0=0x187 #p/x *0x804c0a8=0x804c094 #p/x *0x804c094=0x3bd #p/x *0x804c09c=0x804c088 #p/x *0x804c088=0x255 所以對應關系為:1->0x1a7;2->0x6c;3->0x155;4->0x187;5->0x3bd;6->0x255。第二個數組按從大到小的順序排列應該為:3bd 255 1a7 187 155 6c。所以,輸入的數字應該為:5 6 1 4 3 2。輸入這六個數字即可通過關卡。結論與心得: 這一關用到了排序與映射,首先確定輸入的6個數字為1-6,然后將這6個數字與數組中的數字對應起來,根據數組中的數據應該降序排列確定輸入數字的順序即可。 通過全部關卡過程如下: 四、實驗心得 這次實驗phase_1至phase_3三關相對比較簡單,也比較好理解。但phase_4至phase_6相對比較難,相應的c代碼也不像前面三關一樣簡單易懂,更是加入了鏈表和映射等相關知識,著實花了不少功夫才弄懂。 通過這次試驗,我對匯編代碼有了進一步的了解,更加熟悉了匯編代碼中各種指令的作用,我相信這樣的一次實踐對我今后學習理論課程以及更深入地理解計算機系統會很有幫助。 附件: 山東農業大學 學生管理系統 學生用戶操作手冊 山東農業大學學生工作處 二○○八年九月 目 錄 一、登錄說明.........................................................................................2 二、個人信息.........................................................................................2 三、事務信息.........................................................................................3 四、學生注冊.........................................................................................3 五、學生繳費.........................................................................................4 六、獎學助學.........................................................................................4 七、學生就業.........................................................................................5 八、綜合測評.........................................................................................5 九、在線考試.........................................................................................6 十、安全預警.........................................................................................7 十一、控制面板.....................................................................................8 十二、退出系統.....................................................................................8 一、登錄說明 登陸山東農業大學主頁----機構設置-----學工處----學生管理系統 輸入個人學號和學生處分配的密碼,輸入驗證碼,選擇“學生”,然后點擊右邊的登錄進入系統。 二、個人信息 學籍信息 :點擊瀏覽個人學籍信息。通信信息 :點擊修改個人通信信息。 家庭情況 :點擊查看個人家庭成員,點擊“新增”可以增加家庭成員 學生簡歷 :點擊瀏覽個人簡歷,點擊“新增”增加信息。保險信息 :點擊查看個人已經參加的保險信息。 信用檔案 :點擊查看個人信用信息,可以修改個人信用認識和瀏覽個人失信記錄。違紀記錄 :點擊瀏覽個人違紀記錄。 三、事務信息 點擊導航欄的“事務信息”可以進入事務信息界面。點擊紅色的連接可以進入相應的欄目瀏覽學工發布的內部通報,事務通知,案情通報,異情通報,維權信息,學生投訴,意見建議等相關信息。雙擊列表中的信息,可以瀏覽詳細信息。 四、學生注冊 注冊信息 :點擊瀏覽個人注冊信息。 網上注冊 :開學注冊,點擊進去按照說明填寫。 五、學生繳費 欠費記錄 :點擊瀏覽個人欠費記錄 還款記錄 :點擊瀏覽個人還貸記錄 緩交學費申請 :點擊瀏覽個人緩交學費申請記錄,點擊“新增”填寫新申請。欠費處理申請 :點擊瀏覽個人欠費處理申請記錄,點擊“新增”填寫新申請。 六、獎學助學 點擊導航欄的“獎學助學”可以進入獎學助學界面。獎學助學主要分為: 評優記錄 獎學金記錄 貧困信息登記 社會資助記錄 困難補助記錄 勤工學生信息 勤工崗位申請記錄 貸款記錄 貸款家庭信息 學費減免記錄 1)評優記錄 信息由學工添加,記錄學生三好學生,優秀積極分子等評優記錄。2)獎學金記錄 主要是學生的獎學金記錄。點擊“申請”按鈕可以申請獎學金,按照相關要求填寫完相關信息后點擊“保存并返回”。 3)貧困信息登記 登記學生的家庭收入情況等信息,作為其他申請,學工了解學生家庭情況參考使用。學生每次修改后要通過審核,學工才能瀏覽學生信息,請注意修改。 4)社會資助記錄 記錄學生的社會資助記錄,申請與獎學金類似。 5)困難補助記錄 記錄學生的困難補助記錄,申請與獎學金類似。 6)勤工學生信息 每個學期初學生登記個人的信息,方便勤工管理人員安排工作。點擊“登記”填寫相關信息。 7)勤工崗位申請記錄 勤工崗位申請的記錄。點擊“申請”,填寫相關信息提交。貸款記錄 學生貸款記錄,申請與獎學金類似。 8)貸款家庭信息 貸款專用家庭信息。點擊可以修改。9)學費減免記錄 學生學費減免記錄,申請與獎學金類似。 注:上傳文件主要是一些證明文件,學生照片等申請用到的資料七、八、學生就業 綜合測評 點擊“就業信息”查看個人就業信息。 1)測評成績 :查看各學期的測評成績。2)在線測評 : 點擊“開始測評”按要求說明填寫各項的信息。 3)素質認證 :點擊瀏覽個人的獎項,實踐,學習信息。 4)評優獲獎 :學生的評優,獲獎情況。點擊“新增”可以添加信息。添加后等等審核。5)社會工作 :學生社會工作經歷,點擊“新增”添加工作記錄。6)社會實踐 :與社會工作類似。7)進修與學習:與社會工作類似。 九、在線考試 1)考試信息 列出了你當前可以參加的考試,選中一條考試記錄,點擊按鈕“參加考試”可以參加考試,點擊“報名”可以考試報名。 考試過程: 參加一場考試后,先進入的是考試準備界面,瀏覽考試相關的信息。 倒數完后進入答題界面,在試題上面可以看到自己的學號,考場公告,考試倒計時。在試題下面有提前交卷按鈕,可以提前交卷。“保存答題數據”可以保存你當前的答題數據到服務器上防止因為掉線,電腦意外關機等引起數據丟失,系統會每5分鐘自動保存一次。“加載服務器答題數據”可以把上一次保存的答題數據加載到當前的試卷。 2)考試記錄 考試記錄記錄了你參加過的考試,并在這里可以看到考試成績。3)在線調查 當前可以參與的調查。點擊“參加調查”參與調查。 十、安全預警 安全預警包括: 案情通報 :可以填寫、舉報一些違法犯罪事件。 異情通報 :對一些學生、各種人員、環境等的不正常的情況的一個反饋。維權信息 :用于學生維護自己合法權益。 學生投訴 :對于一些不正常,不公平等事件的投訴。意見建議 :對學校的各種意見建議。 報修信息 :宿舍,學校等各種設備的損壞的一個報修平臺。 操作:點擊上面的連接可以查看相應的記錄,點擊“新增”可以增加相應的記錄。 十一、控制面板 1)點擊修改密碼,可以修改用戶密碼。2)系統幫助,本操作說明。 十二、退出系統 點擊退出系統,可以退出當前用戶,回到登錄界面。請關閉本系統的時候使用本按鈕,以防別人打開系統時候由于瀏覽器緩存而使用你的帳號,產生安全問題。 附件1: 大工業用戶管理規定 依據《供電電營業規則》第二十三、二十四、二十五條規定,用戶減容、用戶暫停、用戶暫換應按下列規定辦理; 一、用戶減容,須在五天前向供電企業提出申請。供電企業應按下列規定辦理: 1、減容必須是整臺或整組變壓器的停止或更換小容量變壓器用電。供電企業在受理之日后,根據用戶申請減容的日期對設備進行加封。從加封之日起,按原計費方式減收其相應容量的基本電費。但用戶申明為永久性減容的或從加封之日起期滿二年又不辦理恢復用電手續的,其減容后的容量已達不到實施兩部制電價規定容量標準時,應改為單一制電費計費; 2、減少用電容量的期限,應根據用戶所提出的申請確定,但最短期限不得少于六個月,最長期限不得超過二年; 3、在減容期限內,供電企業應保留用戶減少容量的使用權。超過減容期限要求恢復用電時,應按新裝或增容手續辦理; 4、在減容期限內要求恢復用電時,應在五天前向供電企業辦理恢復用電手續,基本電費從啟封之日起計收; 5、減容期滿后的用戶以及新裝、增容用戶,二年內不得申辦減容或暫停。如確需繼續辦理減容或暫停的,減少或暫停部分容量的基本電費應按百分之五十計算收取。 二、用戶暫停,須在五天前向供電企業提出申請。供電企業應按下列規定辦理: 1、用戶在每一日歷年內,可申請全部(含不通過受電變壓器的高壓發動機)或部分用電容量的暫時停止用電兩次,每次不得少于十五天,一年累計暫停時間不得超過六個月。季節性用電或國家另有規定的用戶,累計暫停時間可以另議; 2、按變壓器容量計收基本電費的用戶,暫停用電必須是整臺或整組變壓器停止運行。供電企業在受理暫停申請后,根據用戶申請暫停日期對暫停設備加封。從加封之日起,按原計費方式減收其相應容量的基本電費; 3、暫停期滿或每一日歷年內累計暫停用電時間超過六個月者,不論用戶是否申請恢復用電,供電企業須從期滿之日起,按合同約定的容量計收其基本電費; 4、在暫停期限內,用戶申請恢復暫停用電容量用電時,須在預定恢復日前五天向供電企業提出申請。暫停時間少于十五天者,暫停期間基本電費照收; 5、按最大需量計收基本電費的用戶,申請暫停用電必須是全部容量(含不通過受電變壓器的高壓電動機)的暫停,并遵守本條1至4項的有關規定。 三、用戶暫換(因受電變壓器故障而無相同容量變壓器替代,需要臨時更換大容量變壓器),須在更換前向供電企業提出申請。供電企業應按下列規定辦理: 1、必須在原受電地點內整臺的暫換受電變壓器; 2、暫換變壓器的使用時間,10千伏及以下的不得超過二個月,35 千伏及以上的不得超過三個月。逾期不辦理手續的,供電企業可中止供電; 3、暫換的變壓器經檢驗合格后才能投入運行; 4、對兩部制電價用戶須在暫換之日起,按替換后的變壓器容量計收基本電費。 網站用戶管理系統V1.0 1 網站用戶管理系統 1.1 系統簡介 網站需要用戶互動來促進網站發展。當用戶在網站中注冊為注冊會員,則相當于在網站中有了一個通行證,會員可用以辨別屬于自己的信息、訪問或發布權限允許內的信息。站長可用以對會員設定各種優惠方案、積分活動和統計相關情況,以提高網站運營成功率。 網站用戶分成管理員、注冊會員和游客三大類,其中管理員和注冊會員都有獨立的管理界面。管理員擁有網站管理后臺管理權限。注冊會員可以瀏覽相關權限范圍內的網頁信息,并可在會員中心發表相關信息。 注冊會員可自由劃分成不同的會員組,以設置本類會員組所擁有的權限。在網站正式運營前,需要先設置網站中用戶的權限,如是否允許會員在網站中注冊、是否可以在網站中發表信息等權限。1.2 軟件安裝 1.將“用戶管理系統”文件夾拷貝到計算機D盤或E盤里。 2.打開“用戶管理系統”文件夾,將config文件打開,把里面“server=?”改為“server=數據庫服務器名(機子本身的服務器名或(LOCAL))”并將該文件保存。 3.雙擊“用戶管理系統”里的“UserServers”文件(以快捷方式發送至桌面),就可以運行軟件了。 1.21安裝環境 軟件環境 操作系統:Windows XP/Windows 2000/Windows2003 運行環境:MS Visaul Studio 2005 MS SQL Server 2000 硬件環境 網站用戶管理系統V1.0 2 CPU :2GHZ以上 內存:1024M以上 硬盤:80G以上 2.1用戶管理系統使用說明 2.11功能 提供軟件的一般用戶管理系統 2.22配置用戶參數 配置用戶參數 依次點擊“系統設置”->“網站配置”->“用戶參數配置”,在“用戶參數配置”中只有開啟了會 員注冊功能,才需要進一步設置相關注冊參數。設置好相關參數后,單擊頁面底部“保存設置”按鈕保存 相應配置。 建立的表:以下表在建立時應該先加密碼,程序打開時才由程序傳 網站用戶管理系統V1.0 3 遞密碼。以避免直接用工具可打開DB文件。 用戶資料表 用戶ID: 用戶登錄時輸入的用戶名。 用戶姓名: 用戶的真實姓名。 密碼: 用戶密碼(在存入前應該進行必要的加密) 權限: 用戶級別。 有效期開始:該帳號從何時開始有效(下面程序沒利用該功能) 有效期截止:何時該帳號不能用。 是否有效: 可以讓該用戶暫時為不可用。 出錯次數: 用戶連續輸錯密碼次數(當有正確輸入時復位) 出錯限度: 允許輸錯密碼次數,如果超過該限度,該用戶置為不可用,必須找管理員為其復位。 備注: 必要的說明。 活動表: 用戶ID: 記錄進入系統的用戶ID.活動狀態: 該用戶是否是當前活動用戶。(程序允許A用戶進入后,不必 退出系統而讓B用戶進入,A用戶被置為非活動用戶,當B退出后A被變為活動用戶,只有第一個用戶才能退出系統,同時清空活動表) 進入系統的驗證 供用戶進入系統的密碼輸入窗口。 當用戶輸入完成后,首先打開用戶資料表,檢查該用戶是否存在,若不存在,清空用戶輸入,提示不存在該用戶,讓用戶從新輸入,用戶名輸入錯誤這里將不作次數限制。 網站用戶管理系統V1.0 4 若存在該用戶,接著驗證密碼,如果正確,根據用戶的使用期限,是否有效作判斷,并根據結果作出是否允許用戶進入系統。如果不允許,給出相應的提示后關閉系統。否則,根據用戶的級別置某些功能不能使用,同時在活動表中記錄該用戶已進入,并復位出錯次數字段。 如果存在該用戶,但密碼錯誤,用戶資料表中的出錯次數加一。讓用戶從新輸入。 實現部分功能的程序 密碼修改 一般用戶只能修改自己的密碼,當用戶選擇該功能時,提示用戶輸入一次舊密碼,兩次新密碼。用戶可以按清除鍵重新輸入。當用戶輸入完成后,先從活動表找出 該用戶ID,再按ID尋找用戶資料表找到該用戶,先比較舊密碼,錯誤提示從新修改,正 確則完成修改。 超級用戶可以設置/修改用戶資料表中的所有資料及密碼初始化。網站用戶管理系統V1.0 5 2.3.1 用戶管理 2.3.1.1 用戶系統管理 注冊前臺會員 在網站首頁的“用戶登錄”中,單擊“注冊”功能鏈接,在出現的“用戶冊”頁面單擊“我同意”按鈕同意服務條款和聲明后,在顯示的信息頁中填寫用戶名、密碼等相關內容,單擊“下一步”按鈕,系統出現注冊成功提示信息。返回在網站首頁,在“用戶登錄”中填寫剛才注冊的用戶名與密碼后,單擊“登錄”按鈕登錄,在登錄成功后,“用戶登錄”中顯示登錄信息,若單擊“會員中心”功能鏈接即可進入會員中心操作相關信息,若單擊“退出登錄”功能鏈接即可退出登錄。 2.3.1.2 管理會員組 依次點擊“用戶管理”->“會員管理”->“會員組管理”,在出現的管理界面中顯示了系統默認內置的 會員組信息。在“注冊會員”會員組的“操作”列中單擊“修改”功能鏈接,在出現的“修改會員組”界面中,修改會員組名稱、會員組說明,點選會員組類型后,單擊“保存會員組并進行權限設置”功能按鈕,系統自動轉到“設置會員組權限”管理界面中,可進一步修改本會員組中的所有會員的發布權限、評論權限、短消息權限、收藏夾權限、計費方式、扣點券方式、自助充值等相關選項及參數,同時也可以設置本會員組中的會員的 節點權限、專題權限和字段權限。修改好相關信息后,單擊頁面底部的“保存”功能按鈕,系統出現成功提示信息,單擊“<< 返回上一頁”功能鏈接返回會員組管理界面。網站用戶管理系統V1.0 6 2.3.1.3 更改密碼 在控制臺主界面的工具欄上,點擊“更改密碼”按鈕,會彈出更改密碼的對話框,可以更改超級管理員密碼。 2.3.1.3 退出控制臺 在控制臺主界面的工具欄上,點擊“退出系統”按鈕,即退出控制臺。 2.3.1.4 鎖定控制臺 在控制臺主界面的工具欄上,點擊“鎖定系統”,會彈出鎖定系統的對話框,必須輸入正確的超級管理員密碼,才能夠解除控制臺的鎖定狀態。 2.4 基本操作 2.4.1 新增管理員 在管理員列表空白處單擊鼠標右鍵,在彈出的菜單中選擇“新增管理員”; 網站用戶管理系統V1.0 7 點擊“新增管理員”后,在彈出的對話框中填入用戶名稱(如:Admin),并且選定操作權限(如:操作員),然后在“登錄密碼”框中輸入密碼,再在“確認密碼”框中再次輸入剛才鍵入的密碼,最后點擊對話框上的“確認”。 此時用戶可以退出系統,然后用新建的管理員帳號登錄,以驗證此帳號的成功建立。 2.5 留言板管理 留言列表中顯示留言的發布者、發布時間、所在IP地址、留言內容、聯系方式及留言所屬分類等信息,便于進行管理(修改或刪除)操作。 [回復/修改回復]:選中需回復/修改的留言,單擊[回復/修改回復]按 網站用戶管理系統V1.0 8 鈕,進入回復修改留言界面,操作完畢單擊“提交”按鈕。 [刪除]:選中需刪除的留言,單擊[刪除]按鈕,確定刪除留言。注意:刪除后不可恢復,操作需謹慎。 :勾選或多選需審核的留言,單擊審核留言按鈕,進行審核。審核過的留言方可在前臺顯示。 :勾選或多選需刪除的留言,單擊刪除留言按鈕,進行批量刪除。注意:刪除后不可恢復,操作需謹慎。 相關內容: 網站用戶管理系統V1.0 9 重復留言時間限制:對重復留言的時間間隔做出限制,可在一定程度上防止營銷軟件的惡意留言。 操作步驟:單擊菜單“系統設置”》“系統參數設置”子菜單,進入參數設置界面,選擇“信息屬性”,進行“重復留言時間限制”設置。 2.6 用戶反饋系統 單擊“插件管理”菜單 》信息反饋管理“管理信息反饋”子菜單,進入管理信息反饋界面: 信息反饋列表中顯示反饋的ID、標題、反饋所屬分類、發布時間等信息,便于進行管理(刪除)操作。 管理反饋: [刪除]:選中需刪除的信息反饋,單擊[刪除]按鈕,確定刪除反饋。注意:刪除后不可恢復,操作需謹慎。 :勾選或多選需刪除的信息反饋,單擊批量刪除按鈕,確定刪除反饋。注意:刪除后不可恢復,操作需謹慎。 :管理信息反饋界面到管理反饋分類界面的轉換按鈕。 :管理信息反饋界面到管理反饋字段界面的轉換按鈕。網站用戶管理系統V1.0 10 自定義信息反饋表單制作步驟: 1、分析反饋表單需要的字段; 2、增加反饋表單所需字段(如果原本的字段足夠,這步可跳過); 3、增加信息反饋分類(每個信息反饋分類都可有不同的反饋表單); 4、完成。 下面舉例說明: 制作“作品提交”表單 1、分析反饋表單需要的字段: 經過分析我們需要的字段如下:(字段標識:字段名)姓名:name 聯系郵箱:email 聯系電話:call 名:title 簡介:saytext 2.7 好友列表 在網站中,會員可以將其他會員添加為好友,以方便隨時快捷地給好友發送站內短消息。單擊導航區“好 友列表”書簽式面板,出現好友列表、添加好友、創建新組、分組管理等功能鏈接。 單擊導航區“好友列表”導航鏈接,出現好友列表、添加好友、創建新組、分組管理等功能鏈接,在 網站用戶管理系統V1.0 11 下方界面中系統以分頁列表的方式顯示本會員的成員組及相關好友信息。 添加好友 在界面中填寫成員用戶名,選擇成員組(默認可選擇黑名單或我的好友)后,單擊“添加成員”按 鈕以添加好友。在好友列表界面中即可點擊操作列中“發短消息”功能鏈接,對本好友發送站內短消息。 2.8 快捷管理信息 在管理界面頂部,將鼠標移至“選擇欄目”功能鏈接上,系統以樹型結構顯示站內的節點列表(若有 多級節點分類,鼠標點擊節點樹前面的“+”圖標即可展開下級節點)。單擊相應欄目節點名可以快速管理 欄目中的信息。在相應節點名上單擊鼠標右鍵,即可出現相應的管理菜單項。 在相應節點上單擊鼠標右鍵,在彈出的右鍵菜單中選擇“添加信息”(系統根據不同的內容模型而顯示 不同的項目名,如添加文章、添加圖片、添加軟件等)功能鏈接則可快捷添加信息,系統將直接進入“內 容添加”管理界面。 2.9 短消息管理 系統提供站內短消息互動功能,注冊會員既可以對網站中的注冊會員發送短消息、管理站內短消息,也 可以回復其他會員發送來的站內短消息。網站用戶管理系統V1.0 12 單擊導航區“短消息管理”導航鏈接,在出現的管理界面中顯示本會員收到的短消息信息。撰寫短消息 單擊導航區“短消息管理”書簽式面板中“撰寫短消息”功能鏈接,在出現的界面填寫收件人、短消 息主題和短消息內容后,單擊“發送”按鈕即可向指定的收件人發送短消息,同時收件人打開會員中心時系 統將自動彈出短消息;單擊“保存”按鈕出現保存成功信息,短消息保存在您的“草稿箱”里;單擊“清 除”按鈕即清除所撰寫的短消息內容。重要參數說明: 收件人:指定要收本條短消息的站內注冊會員。在收件人內容框中,可以用英文狀態下的逗號將用戶名 隔開實現群發,最多2 0 0 0 個用戶。若會員在“好友列表”中添加了好友,則可在“請選擇”下拉選擇框 中快捷選擇加為好友注冊的會員名。 草稿箱 在此界面中顯示短消息的收件人、主題、發送短消息的日期、大小、已讀及刪除操作等信息。單擊短 消息主題可具體查看此短消息。您可以單擊操作列中的“刪除”,將對應的短消息刪除;也可以選定多個 或者本頁所有短消息,單擊“刪除選定的短消息”或者“清空草稿箱”進行批量刪除。 收件箱 在此界面中顯示短消息的收件人、主題、發送短消息的日期、大小、已讀及刪除操作等信息。單擊短 消息主題可具體查看此短消息。您可以單擊操作列中的“刪除”,將對 網站用戶管理系統V1.0 13 應的短消息刪除;也可以選定多個或 者本頁所有短消息,單擊“刪除選定的短消息”或者“清空已發送”進行批量刪除。發件箱 此界面顯示短消息的收件人、主題、發送短消息的日期、大小、已讀及刪除操作等信息。單擊短消息 主題可具體查看此短消息。您可以單擊操作列中的“刪除”,將對應的短消息刪除;也可以選定多個或者 本頁所有短消息,單擊“刪除選定的短消息”或者“清空已發送”進行批量刪除。 廢件箱 此界面顯示短消息的收件人、主題、發送短消息的日期、大小、已讀及刪除操作等信息。單擊短消息 主題可具體查看此短消息。您可以單擊操作列中的“刪除”,將對應的短消息刪除;也可以選定多個或者 本頁所有短消息,單擊“刪除選定的短消息”或者“清空已發送”進行批量刪除。 2.10 資金管理 當會員在網站中消費行為而產生的相關訂單與資金消費情況,都將記錄在會員中心相關明 細記錄里。在資金管理中,會員可以查閱收入、支出、在線支付及點券、積分、有效期兌換等明細記錄。 單擊導航區“資金管理”書簽式面板,出現所有明細記錄、所有收入記錄、所有支出記錄、在線支 付記錄等功能鏈接。所有明細記錄 單擊“所有明細記錄”功能鏈接,在界面系統以分頁列表的方式顯示會員在網站中所有收入和支出信息,包括交易時間、交易方式、幣種、收入金額、支出金額、銀行名稱和備注/ 說明等信息。所有收入記錄 單擊“所有收入記錄”功能鏈接,在界面系統以分頁列表的方式顯示會 網站用戶管理系統V1.0 14 員在網站中所有收入信息,包 括交易時間、交易方式、幣種、收入金額、支出金額、銀行名稱和備注/ 說明等信息。所有支出記錄 單擊“所有支出記錄”功能鏈接,在界面系統以分頁列表的方式顯示會員在網站中所有支出信息,包 括交易時間、交易方式、幣種、收入金額、支出金額、銀行名稱和備注/ 說明等。在線支付記錄 單擊“在線支付記錄”功能鏈接,在界面系統以分頁列表的方式顯示會員在網站中所有在線支付信息,包括支付序號、支付平臺、交易時間、匯款金額、實際轉賬金額、交易狀態、銀行信息和備注等信息。第三篇:學生管理系統學生用戶操作手冊
第四篇:大工業用戶管理規定
第五篇:網站用戶管理系統