20155301《信息安全系统设计基础》第六周学习总结
課上作業和課下作業
課上作業
第六周課上測試-2-ch02
任務要求
調用附圖代碼,編寫一個程序 “week0602學號.c",用show_int(), show_float()打印一下你的4位學號,參考教材P33打印出匹配的位序列。
提交運行結果截圖,要全屏,要包含自己的學號信息
參考教材p82,給出出匹配的位序列的推導過程
解決方式
1.書上是打印出int,float的16進制的數字,然后16進制的數字轉化成2進制的數,兩種2進制的數字有一部分是匹配的。
2.我自己的理解剛開始是錯的,我將start[i]轉變成2進制數然后存到一個數組里面,改變了函數的參數由
void show_bytes(byte_pointer start,size_t len)變成了
void show_bytes(byte_pointer start,size_t len,int x[])數組x用來保存2進制數,但是運行之后發現不對,之后發現start[i]應該是10進制的,我利用程序是將16進制的變成2進制的,所以錯了。發現了錯誤以后不知道該怎么改正,因為%.2x是打印出的16進制數,實際上在內存里并沒有這個顯示出來的16進制數保存,就不知道該怎么解決這個問題。
第六周課上測試-3-ch02
任務要求
1 ? ?short int v = -學號后四位
2 ? unsigned short uv = (unsigned short) v
3 ?printf("v = %d, ?uv = %u\n ", v, uv);
3 分析p /x v; p /x uv 與程序運行結果的不同和聯系
解決方式
強制轉換類型的結果保持位值不便,只是改變了解釋這些位的方式
課下作業
ch02 課下作業1
任務要求
發一篇相關內容的博客, 提交博客鏈接
解決方式2.96
1.關于什么是NaN上網查了一下,是Not a Number,其中有很多種,比如0.0/0.0或者負數開平方之類的。在我的程序里測試的是0.0/0.0。
2.如何判斷一個數是否是NaN需要利用到一個函數和一個頭文件<math.h>。函數是
int fpclassify(x):它用來查看浮點數x的情況,fpclassify可以用任何浮點數表達式作為參數,fpclassify的返回值有以下幾種情況。
1.FP_NAN:x是一個“not a number”。
2.FP_INFINITE: x是正、負無窮。
3.FP_SUBNORMAL:x太小,以至于不能用浮點數的規格化形式表示。
4.FP_NORMAL: x是一個正常的浮點數(不是以上結果中的任何一種)。
解決方式2.97
在這題中我編寫了幾個輔助函數。
一個是階乘的函數int RepMul(int a,int n)計算a^n^
int RepMul(int a,int n) {int i,sum=1;if(n==0)return 1;else{for(i=1;i<=n;i++){sum=sum*a;}return sum;} }一個是void shuzu(int a[])這個函數將數組a[]每次加一,遇到就2進位,用來便利2^32^個浮點數。
void shuzu(int a[]) {int flag=2,i,temp;for(i=31;;i--){temp=a[i];if(i!=31)a[i]=(a[i]+flag)%2;else a[i]=(a[i]+1)%2;if(temp+1==2)flag=1;else flag=0;if(i<0||flag==0)break;} }一個是float xiaoshu(int n),用來計算小數部分的值。
float xiaoshu(int n) {float flag=1.0;int i;for(i=0;i<n;i++){flag=flag/2;}return flag; }一個是void f(int a[]),用來實現2^32^個32為的浮點數對應點float數值
void f(int a[]) {int i,flag;float sum=0.0,sum1=0.0,sum2=0.0;for(i=0;i<32;i++){a[i]=0;}while(1){flag=1;for(i=8;i>=1;i--){sum1=sum1+(float)(a[i]*RepMul(2,i-8));}for(i=31;i>=9;i--){sum2=sum2+(float)(a[i]*xiaoshu(i-8));}sum=sum1+sum2;for(i=0;i<32;i++){printf("%d",a[i]);}printf("\t");printf("位級表示:%f\n",sum);shuzu(a);for(i=0;i<32;i++){if(a[i]!=1){flag=0;break;}}if(flag==1)break;} }ch02 課下作業2
之后在自己的虛擬機里按步驟進行之后同樣無法進行,并且虛擬機在之后就無法啟動了,其他同學也是在自己虛擬機里弄得,也出現了同樣的問題,最后都只能新建一個虛擬機。
在第二次完成時無視了這個錯誤,按照步驟進行,與實驗樓里面的教程不同的是計算shellcode的數值這一步驟,實驗樓是0xffffd1b0,而我是0xffffd020,加上100之后得到0xffffd084,之后按步驟進行可以成功
轉載于:https://www.cnblogs.com/fengxingck/p/7750856.html
總結
以上是生活随笔為你收集整理的20155301《信息安全系统设计基础》第六周学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: keepalived+haproxy(双
- 下一篇: vmware-tools安装