編譯器對(duì)RW和ZI的處理_第1頁
編譯器對(duì)RW和ZI的處理_第2頁
編譯器對(duì)RW和ZI的處理_第3頁
編譯器對(duì)RW和ZI的處理_第4頁
編譯器對(duì)RW和ZI的處理_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、課題名稱: 編譯器對(duì)RW和ZI的處理 姓 名: 安 鋼 學(xué) 號(hào): 一、 實(shí)驗(yàn)?zāi)康模篊編譯器在編譯連接C程序時(shí),一般是將程序分成代碼段,初始化數(shù)據(jù)段,未初始化數(shù)據(jù)段,這三個(gè)段通常是在存儲(chǔ)器中分開放置,但又有一些規(guī)律,即代碼段放在一個(gè)位置,未初始化數(shù)據(jù)段是緊接著初始化數(shù)據(jù)段之后。本實(shí)驗(yàn)的目的主要就是為了驗(yàn)證編譯器的這種處理方式。二、 實(shí)驗(yàn)步驟2.1實(shí)驗(yàn)程序設(shè)計(jì)為了研究程序在儲(chǔ)存器中存儲(chǔ)位置的規(guī)律,設(shè)計(jì)了一個(gè)簡(jiǎn)單的函數(shù)如下,函數(shù)有如下特點(diǎn),(1)為了便于跟蹤反匯編,以說明問題更深層次的方面,main函數(shù)里使用了內(nèi)嵌匯編,(2)對(duì)編譯器設(shè)置了code地址和數(shù)據(jù)地址,具體設(shè)置如下圖(3)設(shè)置了幾個(gè)簡(jiǎn)單變

2、量,例子簡(jiǎn)單但能夠更深入的分析問題的本質(zhì)。以上特點(diǎn)都是為了說清楚反匯編的處理。 上圖重點(diǎn)在RO BASE=0X8000 RW BASE=0X10000 后面將會(huì)看到此設(shè)置的意義。實(shí)驗(yàn)程序如下: #include int SPACE , WI , LO=15 , WI1=6 , WI2=10 ; void main(void) _asm add WI,WI1,WI2 mul SPACE,LO,WI / return(SPACE); 如示,設(shè)置了未定義的SPACE , WI 和定義了的 LO=15 , WI1=6 , WI2=10后面的反匯編將說明每一個(gè)變量在存儲(chǔ)器中應(yīng)存放的精確地址。2.2 反匯

3、編的處理 為了方便說明,主要分析放在代碼的注釋部分,結(jié)論性的分析將放在代碼后面,; 編譯器自動(dòng)的預(yù)先處理;注意 此處是從0x開始執(zhí)行 對(duì)照上面所作設(shè)置。_main 0xe28f8090 add r8,pc,#0x90 ; #0x8098 ;跳到 _region_table ;那里放了4個(gè)編譯器系統(tǒng)設(shè)置的4個(gè)常量0xef ldmia r8,r0-r3 ;將4個(gè)量放入R0-R3,0xe add r0,r0,r8 c 0xe add r1,r1,r80xe add r2,r2,r80xe add r3,r3,r80xe240b001 sub r11,r0,#1 ;R11=R0-1 c 0xe242c

4、001 sub r12,r2,#1 ;R12=R2-1 _move_region0xe cmp r0,r1 0x0a00000e beq _zero_region ;R0=R1時(shí)跳到_zero_region 0xe8b00070 ldmia r0!,r4-r6 ;若R0!=R1 將R0指向的內(nèi)容放入 ;r4-r6 同時(shí)R0指針更新c 0xe cmp r4,r5 ;若R4=R5,跳回到 _move_region0x0afffffa beq _move_region0xe tst r4,#1 ;測(cè)試R4第0位是否為10xb addne r4,r4,r11 ;若不為1 則R4=R4+R11c 0xe

5、 tst r5,#1 ;測(cè)試R5第0位是否為10xb addne r5,r5,r11 ;若不為1 則R5=R5+R11 0xe tst r5,#2 ;測(cè)試R5第1位是否為10x addne r5,r5,r9 ;若不為1 則R5=R5+R9c 0xe3c55003 bic r5,r5,#3 ;清除R5的第0,1位的1_move_loop0xe subs r6,r6,#4 ;R6=R6-4 0x ldrcs r7,r4,#4 ;大于等于0x strcs r7,r5,#4c 0x8afffffb bhi _move_loop ;大于0xeaffffee b _move_region_zero_reg

6、ion0xe cmp r2,r3 ;R2=R3時(shí)跳到 _rt_entry /*注 此處添加 _rt_entry 后面的部分代碼。_rt_entry0xeb00004d bl _rt_stackheap_init ;由函數(shù)名知 是堆棧初始化e4 0xeb00000d bl _rt_lib_init ;由函數(shù)名知 是關(guān)于庫的初始化e8 0xebffffee bl main ;初始化完成后,即進(jìn)程環(huán)境初始化后,跳到main處 ;BL 表示main完后還會(huì)跳回來ec 0xea b exit ;MAIN 執(zhí)行完,執(zhí)行exit/ UNIX系統(tǒng)中,main進(jìn)程執(zhí)行前 G編譯器要進(jìn)行例行處理,以獲得命令行參數(shù)

7、和環(huán)境表,執(zhí)行完main后自動(dòng)執(zhí)行exit 以關(guān)閉I/O流,釋放進(jìn)程的資源 其調(diào)用形式形如EXIT(main(argc,argv)); 可見ADS的編譯器與UNIX大同小異*/* /此處以分析過main執(zhí)行完的處理,故后面將略去相關(guān)分析。/ 接_zero_region0xe cmp r2,r3 0x0b00001c bleq _rt_entryc 0xe3a07000 mov r7,#0 ;R2!=R3時(shí)0xe8b20030 ldmia r2!,r4,r5 ;基本同上分析0xe tst r4,#10xc addne r4,r4,r12c 0xe tst r4,#20x addne r4,r4,

8、r90xe3c44003 bic r4,r4,#3_zero_loop0xe subs r5,r5,#4c 0x strcs r7,r4,#40x8afffffc bhi _zero_loop0xeafffff2 b _zero_region ;跳回到_zero_region _region_table0x dcd 0x .c 0x dcd 0x 4.a0 0x dcd 0x 4.a4 0xc dcd 0xc L.;可見以上4個(gè)常量就是說明編譯器如何存放代碼和數(shù)據(jù)段的;下面的分析將更加直觀 ;程序主流程從這里開始 ;與前面的設(shè)置對(duì)應(yīng) 可以很清晰的看到初始化了的變量存放在#0x處,和設(shè)置的一樣!

9、Main 0xe59f1020 * ldr r1,0xd0 ; = #0x ;R1=初始化數(shù)據(jù)區(qū)ac 0xe ldmib r1,r0,r2 ;初始化數(shù)據(jù)區(qū)前兩個(gè)數(shù)取出來&R1+8b00xe add r0,r0,r2 ;相加 WI1+WI2=R0 R1指向LOb40xe59f2018 ldr r2,0xd4 ; = #0xc ;指針到第13字節(jié)b80xe str r0,r2,#4 ; R0存入第17字節(jié)處 即WI處 ;完成了add WI,WI1,WI2 ;此時(shí) R1指向LO r2,指向SPACE ; R0=WIbc 0xe ldr r1,r1,#0 ;將初始化數(shù)據(jù)區(qū)中的LO取出c0 0xe mul r0,r1,r0 ;MUL WI,LO,WI c4 0xe str r0,r2,#0 ;將WI存入 未初始化變量區(qū)的SPACE;至此 程序主流程已完成 ;這前后大都是編

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論