版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
精品文檔習(xí)題3.參考答案:(1)后綴:(2)后綴:b,源:寄存器,(3)后綴:l,源:比例變址,(4)后綴:b,源:基址,(5)后綴:l,源:立即數(shù),(6)后綴:l,源:立即數(shù),(7)后綴:w,源:寄存器,w,源:基址+比例變址+偏移,目:寄存器目:基址+偏移目:寄存器目:寄存器目:棧目:寄存器目:寄存器(8)后綴:l,源:基址+變址+偏移,目:寄存器4.參考答案:(1)源操作數(shù)是立即數(shù)0xFF,需在前面加‘$’(2)源操作數(shù)是16位,而長(zhǎng)度后綴是字節(jié)‘b’,不一致(3)目(4)操作數(shù)位數(shù)超過(guò)16位,(5)不能用8位寄存器作的操作數(shù)地址所在寄存器的操作數(shù)不能是立即數(shù)尋址而長(zhǎng)度后綴為16位的‘w’為目(6)源操作數(shù)寄存器與目操作數(shù)寄存器長(zhǎng)度不一致(7)不存在ESX寄存器實(shí)用文檔精品文檔(8)源操作數(shù)地址中缺少變址寄存器5.參考答案:表3.12題5用表src_typedst_type機(jī)器級(jí)表示charintintmovsbl%al,(%edx)movb%al,(%edx)charintunsignedmovl%eax,(%edx)shortintmovswl%ax,(%edx)unsignedcharunsignedmovzbl%al,(%edx)charintunsignedmovsbl%al,(%edx)movl%eax,(%edx)int6.參考答案:(1)xptr、yptr和zptr對(duì)應(yīng)實(shí)參R[ebp]+16。所存放的存儲(chǔ)單元地址分別為:R[ebp]+8、R[ebp]+12、(2)函數(shù)func的C語(yǔ)言代碼如下:voidfunc(int*xptr,int*yptr,int*zptr){實(shí)用文檔精品文檔inttempx=*xptr;inttempy=*yptr;inttempz=*zptr;*yptr=tempx;*zptr=tempy;*xptr=tempz;}實(shí)用文檔精品文檔7.參考答案:(1)R[edx]=x(2)R[edx]=x+y+4(3)R[edx]=x+8*y(4)R[edx]=y+2*x+12(5)R[edx]=4*y(6)R[edx]=x+y8.參考答案:(1)指令功能為:EDX中內(nèi)容改變。改變后的內(nèi)容為以下運(yùn)算的結(jié)果:000000000000000000000000R[edx]←R[edx]+M[R[eax]]=0x00000080+M[0x8049300],寄存器00000080H+FFFFFFF0H+1000000000000000000000000因此,EDX中的內(nèi)容改變?yōu)?x00000070。根據(jù)表3.5可知,加法指令會(huì)影響OF、SF、ZF和CF標(biāo)志。OF=0,ZF=0,SF=0,CF=1。(2)指令功能為:R[ecx]←R[ecx]-M[R[eax]+R[ebx]]=0x00000010+M[0x8049400],寄存器ECX中內(nèi)容改變。改變后的內(nèi)容為以下運(yùn)算的結(jié)果:00000010H-80000008H000000000000000000000000+0100000000000000000000000實(shí)用文檔因此,ECX中的內(nèi)容改為SF、ZF和CF標(biāo)志。OF=1,ZF=0,SF=1,CF=10=1。(3)指令功能為:R[bx]←R[bx]orM[R[eax]+R[ecx]*8+4],寄存器BX中內(nèi)容改改變后的內(nèi)容為以下運(yùn)算的結(jié)果:0x0100orM[0x8049384]=0100HorFF00H0x80000008。根據(jù)表3.5可知,減法指令會(huì)影響OF、變。0000000100000000o111111110000因此,BX中的內(nèi)容改為0xFF00。由3.3.3節(jié)可知,OR指令執(zhí)行后OF=CF=0;因?yàn)榻Y(jié)果不為0,故ZF=0;因?yàn)樽罡呶粸?,故SF=1。(4)test指令不改變?nèi)魏瓮ㄓ眉拇嫫鳎鶕?jù)以下“與”操作改變標(biāo)志:R[dl]and0x801000000010000000an由3.3.3節(jié)可知,TEST指令執(zhí)行后OF=CF=0;因?yàn)榻Y(jié)果不為0,故ZF=0;因?yàn)?,故SF=1。(5)指令功能為:M[R[eax]+R[edx]]←M[R[eax]+R[edx]]*32,即存儲(chǔ)單元0x8049380以下運(yùn)算的結(jié)果:M[0x8049380]*32=0x908f12a8*32,也即只要將0x908f12a8左移5位即可最高位為中的內(nèi)容改變?yōu)榈玫浇Y(jié)果。10010000100011110001001010101000<<5=00010001111000100101010100000000精品文檔因此,指令執(zhí)行后,單元0x8049380中的內(nèi)容改變?yōu)?x11e25500。顯然,這個(gè)結(jié)果是溢出的。但是,根據(jù)表3.5可知,乘法指令不影響標(biāo)志位,也即并不會(huì)使OF=1。實(shí)用文檔精品文檔(6)指令功能為:R[cx]←R[cx]-1,即CX寄存器的內(nèi)容減一。0000000000010000+1000000000000因此,指令執(zhí)行后CX中的內(nèi)容從0x0010變?yōu)?x000F。由表3.5可知,DEC指令會(huì)影響OF、ZF、SF,根據(jù)上述運(yùn)算結(jié)果,得到OF=0,ZF=0,SF=0。9.參考答案:movl12(%ebp),%ecx//R[ecx]←M[R[ebp]+12],將y送ECXsall$8,%ecx//R[ecx]←R[ecx]<<8,將y*256送ECXmovl8(%ebp),%eax//R[eax]←M[R[ebp]+8],將x送EAXmovl20(%ebp),%edx//R[edx]←M[R[ebp]+20],將k送EDXimull%edx,%eax//R[eax]←R[eax]*R[edx],將x*k送EAXmovl16(%ebp),%edx//R[edx]←M[R[ebp]+16],將z送EDXandl$65520,%edx//R[edx]←R[edx]and65520,將z&0xFFF0送EDXaddl%ecx,%edxsubl%edx,%eax//R[edx]←R[edx]+R[ecx],將z&0xFFF0+y*256送EDX//R[eax]←R[eax]-R[edx],將x*k-(z&0xFFF0+y*256)送EAX根據(jù)以上分析可知,第3行缺失部分為:intv=x*k-(z&0xFFF0+y*256);10.參考答案:3實(shí)用文檔精品文檔從匯編代碼的第2行和第4行看,y應(yīng)該是占8個(gè)字節(jié),R[ebp]+20開(kāi)始的4個(gè)字節(jié)為高32位字節(jié),記為y;R[ebp]+16開(kāi)始的4個(gè)字節(jié)為低32位字節(jié),記為y。根據(jù)第4hl行為無(wú)符號(hào)數(shù)乘法指令,得知y的數(shù)據(jù)類(lèi)型num_type為unsignedlonglong。movl12(%ebp),%eax//R[eax]←M[R[ebp]+12],將x送EAX送ECXmovl20(%ebp),%ecx//R[ecx]←M[R[ebp]+20],將yhimull%eax,%ecx//R[ecx]←R[ecx]*R[eax],將y*xh的低32位送ECXmullleal16(%ebp)//R[edx]R[eax]←M[R[ebp]+16]*R[eax],將y*xl送EDX-EAX(%ecx,%edx),%edx//R[edx]←R[ecx]+R[edx],將y*xl的高32位與y*xh的低32位相加后送EDXmovl8(%ebp),%ecx//R[ecx]←M[R[ebp]+8],將d送ECXmovl%eax,(%ecx)//M[R[ecx]]←R[eax],將x*y低32位送d指向的低32位movl%edx,4(%ecx)//M[R[ecx]+4]←R[edx],將x*y高32位送d指向的高32位11.參考答案:根據(jù)第3.3.4節(jié)得知,轉(zhuǎn)移目標(biāo)地址為:(PC)+偏移量。(1)因?yàn)閖e指令的操作碼為01110100,所以機(jī)器代碼7408H中的08H是偏移量,故轉(zhuǎn)移目標(biāo)地址為:0x804838c+2+0x8=0x8048396。call指令中的轉(zhuǎn)移目標(biāo)地址0x80483b1=0x804838e+5+0x1e,由此,條件轉(zhuǎn)移指令都采用相對(duì)轉(zhuǎn)移方式在段內(nèi)直接轉(zhuǎn)移,即條件轉(zhuǎn)移指令的可以看出,call實(shí)用文檔精品文檔指令機(jī)器代碼中后面的4個(gè)字節(jié)是偏移量,因IA-32采用小端方式,故偏移量為0000001EH。call指令機(jī)器代碼共占5個(gè)字節(jié),因此,下條指令的地址為當(dāng)前指令地址0x804838e加5。(2)jb指令中F6H是偏移量,故movl指令的機(jī)器代碼有10個(gè)字節(jié),其轉(zhuǎn)移目標(biāo)地址為:0x8048390+2+0xf6=0x8048488。8個(gè)字節(jié)為兩個(gè)0804A800H,即匯編指令中的4個(gè)字節(jié)為立即數(shù)00000001H,即匯編指令中的常數(shù)0x1。前兩個(gè)字節(jié)是操作碼等,后面立即數(shù),因?yàn)槭切《朔绞?,所以,第一個(gè)立即數(shù)為目的地址0x804a800,最后實(shí)用文檔精品文檔(3)jle指令中的7EH為操作碼,16H為偏移量,其匯編形式中的0x80492e0是轉(zhuǎn)移目的地址,因此,假定后面的mov指令的地址為x,則x滿(mǎn)足以下公式:0x80492e0=x+0x16,故(4)jmp指令中的E9H為操作碼,后面FFFFFF00H,即-100H=-256。后面的sub指令的地址為0x804829b,故jmp指0x804829b+0xffffff00=0x804829b-0x100=0x804819b。12.參考答案:(1)匯編指令的1movb8(%ebp),%dl2movl12(%ebp),%eax//R[eax]←M[R[ebp]+12],將p送EAX3testl%eax,%eax//R[eax]andR[eax],判斷p是否為//若p為0,則轉(zhuǎn).L1執(zhí)行//R[dl]and80H,判斷x的第一位是//若x>=0,則轉(zhuǎn).L1執(zhí)行//M[R[eax]]←M[R[eax]]+R[dl],即*p+=xx=0x80492e0-0x16=0x80492ca。4個(gè)字節(jié)為偏移量,因?yàn)槭切《朔绞?,故偏移量為令的轉(zhuǎn)移目標(biāo)地址為注解說(shuō)明如下://R[dl]←M[R[ebp]+8],將x送DL0456je.L1testb$0x80,%dl否為0je.L17addb%dl,(%eax)8.L1:因?yàn)镃語(yǔ)言if語(yǔ)句中的條件表達(dá)式可以對(duì)多個(gè)條件進(jìn)行邏輯運(yùn)算,而匯編代碼中一條指令只能進(jìn)行一種邏輯運(yùn)算,并且在每條邏輯運(yùn)算指令生成的標(biāo)志都是存實(shí)用文檔精品文檔放在同一個(gè)EFLAGS寄存器中,所以,最好在一條邏輯指令后跟一條條件轉(zhuǎn)移指令,把EFLAGS中標(biāo)志用完,然后再執(zhí)行另一次邏輯判斷并根據(jù)條件進(jìn)行轉(zhuǎn)移的操作。(2)按照書(shū)中圖3.22給出的“if()goto…”語(yǔ)句形式寫(xiě)出匯編代碼對(duì)應(yīng)的C語(yǔ)言代碼如下:1voidcomp(charx,int*p)2{3if(p!=0)if(x<0)*p+=x;456}13.參考答案:1intfunc(intx,inty)2{34567intz=x*y;if(x<=-100if(y>x)z=x+y;else){實(shí)用文檔精品文檔8z=x-y;9}elseif(x>=16)10z=x&yreturnz;;1112}14.參考答案:(1)每個(gè)入口參數(shù)都要按節(jié)。1movw8(%ebp),%bx//R[bx]←M[R[ebp]+8],將x送BX2movw12(%ebp),%si//R[si]←M[R[ebp]+12],將y送SI4字節(jié)邊界對(duì)齊,因此,參數(shù)x、y和k入棧時(shí)都占4個(gè)字3movw16(%ebp),%cx//R[cx]←M[R[ebp]+16],將k送CX實(shí)用文檔精品文檔4.L1:5movw%si,%dx//R[dx]←R[si],將//R[ax]←R[dx],將y送AXy的符號(hào)擴(kuò)展16位送DX//R[dx]←R[dx-ax]÷R[cx]的余數(shù),將y%k送DX//R[ax]←R[dx-ax]÷R[cx]的商,將y/k送AX9imulw%dx,%bx//R[bx]←R[bx]*R[dx],將x*(y%k)送BX10decw%cx//R[cx]←R[cx]-1,將k-1送CX11testw%cx,%cx//R[cx]andR[cx],得OF=CF=0,負(fù)數(shù)則SF=1,零則ZF=112jle//若k小于等于0,則轉(zhuǎn).L213cmpw%cx,%si//R[si]-R[cx],將y與k相減得到各標(biāo)志//若y大于k,則轉(zhuǎn).L1y送DX6movw%dx,%ax7sarw$15,%dx//R[dx]←R[dx]>>15,將8idiv%cx.L214jg.L115.L2:16movswl%bx,%eax(2)被調(diào)用者保存寄存器有BX、SI,調(diào)用者保存寄存器有AX、CX和DX。準(zhǔn)備階段,被調(diào)用者保存的寄存器EBX和ESI必須保存到棧中。(3)因?yàn)閳?zhí)行第8行除法指令前必須先將被除數(shù)擴(kuò)展為32位,算術(shù)右移以擴(kuò)展16位符號(hào),放在高16位的DX中,低16位在AX//R[eax]←R[bx],將x*(y%k)送AX在該函數(shù)過(guò)程體前面的而這里是帶符號(hào)數(shù)除法,因此,采用實(shí)用文檔精品文檔中。15.參考答案:1intf1(unsignedx)2{3inty=0;while(x!=0){y^=x;456x>>=1;7}8returny&0x1;9}函數(shù)f1的功能返回:(x^x>>1^x>>2^….)&0x1,因此f1用于檢測(cè)x的奇偶性,當(dāng)x中有奇數(shù)個(gè)1,則返回為1,否則返回0。16.參考答案:函數(shù)sw只有一個(gè)入口參數(shù)x,根據(jù)匯編代碼的第2~5行指令知,當(dāng)x+3>7時(shí)轉(zhuǎn)標(biāo)號(hào).L7處執(zhí)行,否則,按照跳轉(zhuǎn)表中的地址轉(zhuǎn)移執(zhí)行,x與跳轉(zhuǎn)目標(biāo)處標(biāo)號(hào)的關(guān)系如下:x+3=0:.L7實(shí)用文檔精品文檔x+3=1:.L2x+3=2:.L2x+3=3:.L3x+3=4:.L4x+3=5:.L5x+3=6:.L7x+3=7:.L6由此可知,switch(x)中省略的處理部分結(jié)構(gòu)如下:case-2:case-1:……//.L2標(biāo)號(hào)處指令序列對(duì)應(yīng)的語(yǔ)句break;實(shí)用文檔精品文檔case0:……//.L3標(biāo)號(hào)處指令序列對(duì)應(yīng)的語(yǔ)句break;case1:…….//.L4標(biāo)號(hào)處指令序列對(duì)應(yīng)的語(yǔ)句break;case2:……//.L5標(biāo)號(hào)處指令序列對(duì)應(yīng)的語(yǔ)句break;case4:……//.L6標(biāo)號(hào)處指令序列對(duì)應(yīng)的語(yǔ)句break;default:……//.L7標(biāo)號(hào)處指令序列對(duì)應(yīng)的語(yǔ)句17.參考答案:2、3行指令4、5行指令可知,參數(shù)b和c都是unsignedshort型,根據(jù)第根據(jù)第可知,參數(shù)a是char型,參數(shù)p是指向short型變量的指針;根據(jù)第6行指令可知,test的返回參數(shù)類(lèi)型為unsignedint。因此,test的原型為:unsignedinttest(chara,unsignedshortb,unsignedshortc,short*p);18.參考答案:實(shí)用文檔精品文檔每次執(zhí)行pushl指令后,R[esp]=R[esp]-4,因此,第2行指令執(zhí)行后R[esp]=0xbc00001c。(1)執(zhí)行第3行指令后,R[ebp]=R[esp]=0xbc00001c。到第12條指令執(zhí)行結(jié)束都沒(méi)有改變EBP的內(nèi)容,因而執(zhí)行第10行指令后,EBP的內(nèi)容還是為0xbc00001c。執(zhí)行第13行指令后,EBP的內(nèi)容恢復(fù)為進(jìn)入函數(shù)funct時(shí)的值0xbc000030。(2)執(zhí)行第3行指令后,R[esp]=0xbc00001c。執(zhí)行第4行指令后R[esp]=R[esp]-40=0xbc00001c-0x28=0xbbfffff4。因而執(zhí)行第10行指令后,未跳轉(zhuǎn)到scanf函數(shù)執(zhí)行時(shí),ESP中的內(nèi)容為0xbbfffff4-4=0xbbfffff0;在從scanf函數(shù)返回后ESP中的內(nèi)容為0xbbfffff4。執(zhí)行第13行指令后,ESP的內(nèi)容恢復(fù)為進(jìn)入函數(shù)funct時(shí)的舊值,即R[esp]=0xbc000020。(3)第5、6兩行指令將scanf的第三個(gè)參數(shù)&y入棧,入棧的內(nèi)容為R[ebp]-8=0xbc000014;第7、8兩行指令將scanf的第二個(gè)參數(shù)&x入棧,入棧R[ebp]-4=0xbc000018。故x和y所在的0xbc000018和0xbc000014。的內(nèi)容為地址分別為實(shí)用文檔精品文檔0xbc00x=15y=20棧幀底0xbc000xbc000xbc000xbc000xbc000xbc000xbc000xbc000xbbff0xbbff0xbbff0xbbff從scanf返回ES(4)執(zhí)行第10行指令后,funct棧幀的地址范圍及其內(nèi)容如下:實(shí)用文檔精品文檔19.參考答案:第1行匯編指令說(shuō)明參數(shù)x存放在EBX中,根據(jù)第4行判斷x=0則轉(zhuǎn).L2,否則繼續(xù)入棧參數(shù)nx的計(jì)算公式為x>>1;根可知,返回值為(x&1)+rv。由此推斷出C缺失部分如下:1intrefunc(unsignedx){執(zhí)行第5~10行指令。根據(jù)第5、6、7行指令可知,據(jù)第9、10、11行指令2if(x==0)34return0;unsignednx=x>>1;intrv=refunc(nx);56return(x&0x1)+rv;7}該函數(shù)的功能為計(jì)算x的各個(gè)數(shù)20.參考答案:在IA-32中,GCC為數(shù)據(jù)類(lèi)型longdouble型變量分配12字節(jié)空間,實(shí)10個(gè)字節(jié)。數(shù)組元素大數(shù)組大起始地元素i的地址位中1的個(gè)數(shù)。際上只占用?。˙)?。˙)址實(shí)用文檔精品文檔charA[10]intB[100]short1441040020&A[0]&B[0]&C[0]&A[0]+i&B[0]+4i&C[0]+4i*C[5]short41242412040&D[0]&E[0]&F[0]&D[0]+4i&E[0]+12i&F[0]+4i**D[6]longdoubleE[10]longdouble*F[10]21.參考答案:表達(dá)式類(lèi)型值匯編代碼Sshort*short*Aleal(%edx),%eaxSS+iA+2*ileal(%edx,%ecx,S2),%eaxS[i]shortM[A+2*i]movw(%edx,%ecx,2),%axS實(shí)用文檔精品文檔&S[10]short*&S[i+2]short*A+20leal20(%edx),%eaxleal4(%edx,%ecx,2),%eaxSA+2*i+4S&S[i]-Sint(A+2*i-As)/2=imovl%ecx,%eaxSS[4*i+4]shortM[A+2*(4*i+4)]movw8(%edx,%ecx,S8),%ax*(S+i-2)shortM[A+2*(i-2)]movw-4(%edx,%ecx,S2),%ax22.參考答案:根據(jù)匯編指令功能可以推斷最終在EAX中返回的值為:M[a+28*i+4*j]+M[b+20*j+4*i],因?yàn)閿?shù)組a和b都是int型,每個(gè)數(shù)組元素占4B,因此,M=5,N=7。23.參考答案:執(zhí)行第11行指令M=9,N=63/9=7。根據(jù)第12行指令,可L=4536/(4*L*M)=18。24.參考答案:后,a[i][j][k]的地址為a+4*(63*i+9*j+k),所以,可以推斷出知數(shù)組a的大小為4536字節(jié),故(1)常數(shù)M=76/4=19,存放在EDI中,變量j存放在ECX中。實(shí)用文檔精品文檔(2)上述優(yōu)化匯編代碼對(duì)應(yīng)的函數(shù)trans_matrix的C代碼如下:1voidtrans_matrix(inta[M][M]){2inti,j,t,*p;intc=(M<<2);for(i=0;i<M;i++){p=&a[0][i];for(j=0;j<M;j++){t=*p;334567*p=a[i][j];a[i][j]=t;89p+=c;}101112}}25.參考答案:(1)node所需存儲(chǔ)空間需要4+(4+4)+4=16字節(jié)。成員p、s.x、s.y和next的偏移地址分別為0、4、8和12。(2)np_init中缺失的表達(dá)式如下:voidnp_init(structnode*np){np->s.x=np->s.y;np->p=&(np->s.x);實(shí)用文檔精品文檔np->next=np;}26.參考答案:表達(dá)式EXPRTYPE類(lèi)匯編指令序列型movl(%eax),%eaxmovl%eax,(%edx)intuptr->s1.xuptr->s1.ymovw4(%eax),%axmovw%ax,(%edx)leal6(%eax),%eaxmovw%eax,(%edx)movl%eax,(%edx)shortshort*short*&uptr->s1.zuptr->s2.amovl4(%eax),%ecxmovl(%eax,%ecx,2),%eaxmovl%eax,(%edx)movl8(%eax),%eaxmovb(%eax),%alshortcharuptr->s2.a[uptr->s2.b]*uptr->s2.pmovb%al,(%edx)27.參考答案:(1)S1:scid0248總共12字節(jié),按4字節(jié)邊界對(duì)齊實(shí)用文檔精品文檔(2)S2:iscd0467總共8字節(jié),按4字節(jié)邊界對(duì)齊(3)S3:csid0248總共12字節(jié),按4字節(jié)邊界對(duì)齊(4)S4:sc06總共8字節(jié),按2字節(jié)邊界對(duì)齊實(shí)用文檔精品文檔(5)S5:cside0481216總共24字節(jié),按4字節(jié)對(duì)齊)(6)S6:csd03640總共44字節(jié),按28.參考答案:4字節(jié)邊界對(duì)齊(Linux下double型按4字節(jié)邊界對(duì)齊Windows平臺(tái)要求不同的基本類(lèi)型按照其數(shù)據(jù)長(zhǎng)度進(jìn)行對(duì)齊。每個(gè)成員的偏移量如下:cdisplgv08162024283240結(jié)構(gòu)總大小為48字節(jié),因?yàn)槠渲械膁和g必須是按8字節(jié)邊界對(duì)齊,所以,必須在末尾再加上4個(gè)字節(jié),即44+4=48字節(jié)。變量長(zhǎng)度按照從大到小順序排列,可以使得結(jié)構(gòu)所占空間最小,因此調(diào)整順序后的結(jié)構(gòu)定義如下:struct{doubled;longlongg;inti;charlongvoid*p;l;*v;實(shí)用文檔精品文檔shortchars;c;}test;dgiplvsc08162024283234結(jié)構(gòu)總大小為34+6=40字節(jié)。29.參考答案:(1)執(zhí)行第7行和第10行指令后棧中的信息存放情況如下圖所示。其中g(shù)ets函數(shù)的入口參數(shù)為buf數(shù)組首地址,應(yīng)等于getline函數(shù)的棧幀底部指針EBP的內(nèi)容減0x14,而getline函數(shù)的棧幀底部指針EBP的內(nèi)容應(yīng)等于執(zhí)行完getline中第2行指令(push%ebp)后ESP的內(nèi)容,此時(shí),R[esp]==0xbffc07f0-4=0xbffc07ec,故buf數(shù)組首地址為R[ebp]-0x14=R[esp]-0x14=0xbffc07ec-0x14=0xbffc07d8。返回P的返回P的080485084139EBEBbffc08EBP在P中000000被調(diào)用者000000373635EBP在P中333231464544424139被調(diào)用者000000373635buf[7]~333231buf[3]~buf[7]~buf[3]~ESESbffc07gets入口參b)執(zhí)行第10行后a)執(zhí)行第7行后(2)當(dāng)執(zhí)行到getline的ret指令時(shí),假如程序不發(fā)生段錯(cuò)誤,則正確的返回地址實(shí)用文檔精品文檔應(yīng)該是0x80485c8,發(fā)生段錯(cuò)誤是因?yàn)閳?zhí)行g(shù)etline的ret指令時(shí)得到的返回地址為0x8413938,這個(gè)地址所在存儲(chǔ)段可能是不可執(zhí)行的數(shù)據(jù)段,因而發(fā)生了段錯(cuò)誤(segmentationfault)。實(shí)用文檔精品文檔(3)執(zhí)行完第10行匯編指令后,被調(diào)用者保存寄存器EBX、ESI和EDI在P中的內(nèi)容已被破壞,同時(shí)還破壞了EBP在P中的內(nèi)容。(4)getline的C代碼中malloc函數(shù)的參數(shù)應(yīng)該為strlen(buf)+1,此外,應(yīng)該檢查malloc函數(shù)的返回值是否為NULL。30.參考答案:x86-64過(guò)程調(diào)用時(shí)參數(shù)傳遞是通過(guò)通用寄存器進(jìn)行的,前三個(gè)參數(shù)所用寄存器順序?yàn)镽DI、RSI、RDX。abc的4種合理的函數(shù)原型為:①viodabc(intc,long*a,int*b);②viodabc(unsignedc,long*a,int*b);③viodabc(longc,long*a,int*b);④viodabc(unsignedlongc,long*a,int*b);根據(jù)第3、4行指令a指向64位帶符號(hào)整數(shù)以是64位,因?yàn)?b為32位,所以取RDI中的低32位R[edi](截?cái)酁?2位),再和*b相加。同時(shí),參數(shù)c可以是2行加法指令addl的執(zhí)行31.參考答案:可知,參數(shù)b肯定指向一個(gè)32位帶符號(hào)整數(shù)類(lèi)型;根據(jù)第5行指令可知,參數(shù)類(lèi)型;而參數(shù)c可以是32位,也可帶符號(hào)整數(shù)類(lèi)型,也可以是無(wú)符號(hào)整數(shù)類(lèi)型,因?yàn)榈诮Y(jié)果對(duì)于帶符號(hào)整數(shù)和無(wú)符號(hào)整數(shù)都一樣。實(shí)用文檔精品文檔(1)匯編指令注釋如下:1movl8(%ebp),%edx//R[edx]←M[R[ebp]+8],將2movl12(%ebp),%ecx//R[ecx]←M[R[ebp]+12],將k送ECX3movl$255,%esi//R[esi]←255,將255送ESI4movl$-2147483648,%edi//R[edi]←-2147483648,將0x80000000送EDIx送EDX5.L3:6movl%edi,%eax//R[eax]←R[edi],將//R[eax]←R[eax]andR[edx],將iandx送EAX//R[esi]←R[esi]xorR[eax],將valxor(iandx)i送EAX7andl%edx,%eax%eax,%esi8xorl送ESI9movl%ecx,%ebx//R[ebx]←R[ecx],將k送ECXi邏輯右移k位送10shrlEDI%bl,%edi//R[edi]←R[edi]>>R[bl],將11testl12jne.L3%edi,%edi//若R[edi]≠0,則轉(zhuǎn).L3//R[eax]←R[es
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年統(tǒng)一損失賠償合同范本一
- 2024年咖啡飲品加盟連鎖經(jīng)營(yíng)合同范本3篇
- 溫度溫度顯示器課程設(shè)計(jì)
- 浙大生物制藥課程設(shè)計(jì)
- 油梁式抽油機(jī)課程設(shè)計(jì)
- (標(biāo)準(zhǔn)員)基礎(chǔ)知識(shí)樣卷(共六卷)
- 安全月活動(dòng)總結(jié)試題
- 2024年美術(shù)教案課件
- 財(cái)務(wù)風(fēng)險(xiǎn)管理概述
- 運(yùn)動(dòng)器材店服務(wù)員工作總結(jié)
- 2024年北京石景山初三九年級(jí)上學(xué)期期末數(shù)學(xué)試題和答案
- 智慧管網(wǎng)建設(shè)整體解決方案
- Siemens WinCC:WinCC趨勢(shì)圖與歷史數(shù)據(jù)技術(shù)教程.Tex.header
- 【長(zhǎng)安的荔枝中李善德的人物形象分析7800字(論文)】
- CJT 288-2017 預(yù)制雙層不銹鋼煙道及煙囪
- 生物安全風(fēng)險(xiǎn)評(píng)估報(bào)告
- 戈19商務(wù)方案第十九屆玄奘之路戈壁挑戰(zhàn)賽商務(wù)合作方案
- 廣西河池市宜州區(qū)2023-2024學(xué)年七年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含解析)
- 2024高考政治真題-哲學(xué)-匯集(解析版)
- 對(duì)承租方有利的商鋪?zhàn)赓U合同
- 2024云南大學(xué)滇池學(xué)院教師招聘考試筆試試題
評(píng)論
0/150
提交評(píng)論