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