導航:首頁 > 源碼編譯 > 重定位編譯的關鍵技術

重定位編譯的關鍵技術

發布時間:2023-03-27 12:03:02

編譯器內部使用了哪些技術

編譯器是一種將高級語言代碼轉換為機器語言代碼的工具。在編譯器內部,使用了許多技術來實現代碼的轉換和優化。

其中一些常見的技術包括:

詞法分析器(Lexer):將源代碼轉換為一個個標記(Token),並去除無用的空格和注釋。

語法分析器(Parser):將標記轉換為抽象語法樹(AST),並舉隱檢查語正虛廳法是否正確。

語義分析器(Semantic Analyzer):對AST進行分析,檢查變數、函數、類型等是否符合規范,並進行類型檢查等操作。

優譽早化器(Optimizer):對生成的機器語言代碼進行優化,以提高代碼的執行效率和空間利用率。

代碼生成器(Code Generator):將優化後的代碼生成可執行的機器語言代碼。

調試器(Debugger):用於調試生成的代碼,可以在代碼執行過程中進行斷點調試、變數監視等操作。

編譯器內部使用這些技術,可以提高代碼的執行效率、減少代碼出錯的概率,並方便程序員進行調試和維護。
碼字不易,希望能幫到您! 求採納...

㈡ RISC技術有什麼特點

RISC的英文全稱是Reced Instruction Set Computer,中文是精簡指令集計算機,它的指令系統相對簡單,它只要求硬體執行很有限且最常用的那部分指令,大部分復雜的操作則使用成熟的編譯技術,由簡單指令合成。其技術特點:

1、大多數指令在單周期內完成

2、採用LOAD/STORE結構。因為訪問存儲器指令所需要的時間比較長,在指令系統中要盡量減少這類指令,所以RISC指令中只保留不可再少的LOAD/STORE兩種存儲器訪問指令

3、硬布線控制邏輯。使得大多數指令在單周期內執行完成,以減少為程序技術中的指令解釋開銷

4、減少指令和定址方式的種類

5、固定的指令格式

6、解碼優化

7、面向寄存器結構

8、注重提高流水線的執行效率,盡量讓減少流水線斷流,提高流水線效率

9、優化編譯技術

(2)重定位編譯的關鍵技術擴展閱讀

RISC中的關鍵技術

1、延時轉移技術

在RISC處理機中採用流水線工作方式,取指令和執行指令並行工作,那麼當遇到條件轉移指令時,流水線可能斷流。為了盡量保證流水線的執行效率,在轉移指令之後插入一條有效的指令,而轉移指令好像被延時了,這樣了技術即為延遲轉移技術。通常指令序列的調整由編譯器自動進行。需要注意的是:調整指令序列是不能改變原有程序的數據關系;被移動的指令不破壞機器的條件碼。

2、指令取消技術

由於採用指令延遲技術中,遇到條件轉移指令時,調整指令序列比較困難,採用了指令取消技術。所有轉移指令和數據變換指令都可以決定待執行指令是否應該取消。為了提高執行效率,採用取消規則為:如果向後轉移(轉移的目標地址小雨當前程序計數器PC值),則轉移不成功時取消下一條指令,否則執行下一條指令;如果向前轉移,則相反,在轉移不成功時執行下一條指令,否則取消。

3、重疊寄存器窗口技術

由於RISC的指令系統比較簡單,通常採用一段子程序來實現。因此RISC中的CALL和RETURN非常多,而且都需要通過堆棧操作保存前一過程指針、數據等。為了盡量減少因為CALL和RETURN操作訪問存儲器的量,提出了重疊寄存器窗口技術。基本思想:在處理器中設置一個數量較大的寄存器堆,並劃分成窗口。每個過程使用其中的三個窗口和一個公共窗口,而在這些窗口中有一個窗口式前一個過程公用的,還有一個窗口是與後一個過程共用。與前一過程公用的窗口可以用來存放前一過程傳遞被本過程的參數。

4、指令流水調整技術

為了保持指令流水線高效率,不斷流,優化編譯器必須分析程序的數據流和控制流。當發現指令有斷流可能時,要調整指令順序。有些可以通過變數重命名來消除的數據相關,要盡量消除。例如:
ADD R1,R2,R3; (R1)+(R2)->R3
ADD R3,R4,R5; (R3)+(R4)->R5
MUL R6,R7,R3; (R6)*(R7)->R3
MUL R3,R8,R9; (R3)*(R8)->R9
調整指令後
ADD R1,R2,R3;
MUL R6,R7,R0;
ADD R3,R4,R5;
MUL R0,R8,R9;
調整指令後,速度可以提高一倍。

5、硬體為主固件為輔

指令系統採用為程序實現的優點:便於實現復雜指令,便於修改指令系統,增加機器的靈活性,但是速度慢。所以RISC一般採用硬體為主固件為輔的方法實現指令。

㈢ 什麼是重定位重定位有哪幾種類型2為什麼要進行重定位

1.什麼是重定位?由於一個作業裝入到與其地址空間不一致的存儲空間,對有關地址部分的調整過程稱為重定位。2.重定位有哪幾種類型?分為靜態重定位和動態重定位兩種類型。3.為什麼要進行重定位?我們寫正常程序的時候根本不用去關心變數(常量)的位置,因為源程序在編譯的時候它的內存中的位置郡被計算好了。程序裝入內存時,系統不會為它重定位。我們需要用到變數 (常量)的時候直接用變數名訪問它就行了。有的程序不可避免也要用到變數 (常量),各個變數 (常量)在內存中的位置自然也不相同。既然這些變數沒有固定的地址,那麼程序在運行的過程中只有重定位,才可以正常地訪問相關資源。

㈣ 如何用代碼實現動態重定位

重定位過程和方法

3.1 nor flash啟動-----只重定位 .data

為了實現修改,我們考慮將g_char保存在外部的sdram中,修改Makefile如下:

all:

arm-linux-gcc -c -o led.o led.c

arm-linux-gcc -c -o uart.o uart.c

arm-linux-gcc -c -o init.o init.c

arm-linux-gcc -c -o main.o main.c

arm-linux-gcc -c -o start.ostart.S

arm-linux-ld -Ttext 0 -Tdata 0x30000000 start.o led.ouart.o init.omain.o -o sdram.elf

arm-linux-obj -O binary -Ssdram.elf sdram.bin

arm-linux-objmp -D sdram.elf> sdram.dis

clean:

rm *.bin *.o *.elf *.dis

編譯之後,發現bin文件為800多M,顯然這是不合理的

BIN文件的數值為什麼是805306369?我們發現姿兆805306369=0x30000001,的確,我們在Makefile中就是指明了全局變數保存在SDRAM中,所以BIN文羨遲件的保存地址是從0~0x30000000,其大小正好是0x30000001,因此,這個時候,我們的代碼段和數據段的存儲格式如下:(中間產生了巨大的空洞hole)

為了解決上面的方法,代碼過大的問題,有兩種方式來解決:

A. 將data段重定位到SDRAM中,text段仍在跡派租NOR Flash中

1. 仍然將全局變數數據段和代碼段燒寫到nor flash中

2. 在運行時,代碼段代碼要能實現將數據段拷貝(重定位)到SDRAM中;

3. 以後每次訪問全局變數,都是去SDRAM中去訪問,不去nor flash中訪問

㈤ 什麼是重定位,重定位的原理

編譯時候的重定位,編行橡圓譯原理里有檔塌的.也就是說,編譯好的文件,變如謹量等都有個相對地址,在運行的時候,需要重定位到真正的內存地址,一般需要重定位的地址,在EXE文件中都有標記的.

㈥ 編譯器開發的四種技術

編譯程序的開發常常採用這四種:自編譯、交叉編譯、自展和移植等技術實現。

㈦ 舉例說明病毒如何重定位

病毒的生存空間就是宿主程序,而因為宿主程序的不同。所以病毒每次插入到宿主程序中的位置也不同。那麼病毒需要用到的變數的位置就無法確定。所以這就是病毒首先要重定位的原因。在我們編寫程序的時候,所用到的變數的位置都是相對與程序某一個位置的偏移,正常的程序載入的地址是唯一的,所以它們不需要重定位。而病毒的載入是隨機的所以就有了重定位的過程。雖然載入的位置不一定,但是變數到某一個位置的偏移卻是固定的。所以重定位的基本原理就是找到這個特殊的位置。具體的方法有很多種。這里說幾種常見的。

一、重定位的原因

都說病毒第一步要重定位,那到底為什麼要重定位呢?我們寫正常程序的時候根本不用去關心變數(常量)的位置,因為源程序在編譯的時候它的內存中的位置郡被計算好了。程序裝入內存時,系統不會為它重定位。我們需要用到變數 (常量)的時候直接用變數名訪問它就行了。

病毒不可避免也要用到變數 (常量),當病毒感染HOST程序後,由於其依附到HOST程序中的位置各有不同,病毒隨著HOST載入內存後病毒中的各個變數 (常量)在內存中的位置自然也不相同。既然這些變數沒有固定的地址,病毒在運行的過程中應該如何引用這些變數呢塵核?所以,病毒只有自己幫助自己重定位,這樣就可以正常地訪問自己的相關資源了。

二、如何重定位

大家都知道CALL是一條函數調用指令,也可以當成是跳轉指令。它可以跳到目的地址繼續執行,執行完畢後,會返回到主程序繼續執行。那系統如何知道返回地址的呢?當CALL執行時,CPU首先把要返回的地址 (即下一條指令的地址)壓火堆棧,然後跳到我們目的地址執行。可以看出,在跳轉之後只要執行一條POP指令或MOVEXX,[ESP]就可以得到下一條指令在內存中的實際位置了。其實,對於任何一個變數,我們都可以採用這種方式進行重定位。

好了,原理都講完了,現在讓我們廳缺總結一下重定位的基本步驟 (這里假設下一條指令為I1):

(1)用CALL指令跳轉到下一條指令,使I1在內存中的實際地址進棧。

(2)用POP或MOV EXX,[ESP]取出棧頂的內容,這樣就得到了I1的地址 (BaSe)。

(3)其他指令 (變數、常量)的實際地址就等於Base+(0ffSetLabe1-OffSet vstart)。

三、實例說明

現在,就讓我們看一下重定位的具體代碼。

這里VStart這個標號的位置就是I1的位置了。下面看看代碼是怎麼實現的:Ca1lVStart跳到vStart,然後pop ebX把堆棧頂端的內容 (即VStart在內存中的地址)放到ebx。這樣。以後用到其他變數的時候就可以用ebX+(OffSet XXX-OffSet VStart)得到其在內存中的真正偏移地址了。

call vstart

vstart:

pop ebx ;定義為I1指定

下面再具體一點。譬如我們想取變數abc的內容時,則可先取地址到esi中,然後使用 "mov eax,[esi]"指令即可得到abC的內容。

abc dd 0

...

call vstart

vstart:pop ebx

...

lea esi,[ebx+(abc-vstart}]

上面我們提到偏移地址可以通過ebx+(Offset XXX-OffSet VStart)計算得到。我們通常也可以看到如下重定位方式:

abc dd.0

...

call vstart

vstart:

pop ebx

sub ebx,offset vstart

...

mov eax,[ebx+abc]

其實這和上面那種方法最終結果是一樣的,只不過是換了一種形式,即 (ebX-0ffSetVStart)+OffSet XXX。另外,扮兄辯在實際過程中還會碰到其他重定位方式,並且需要重定位的絕對不僅局限於變數和常量,不過所有原理都是一樣的。

㈧ 重定位的時機

將邏輯地址空間重定位到物理地址空間的時機有三種:

1、程序編譯連接時。

2、程序裝入內存時。

3、程序執行時。

重定位就是把程序的邏輯地址空間變換成內存中的實際物理地址空間的過程。它是實現多道程序在內存中同時運行的基礎。重定位有兩種,分別是動態重定位與靜態重定位。

分類

對程序進行重定位的技術按重定位的時機可分為兩種:靜態重定位和動態重定位。

靜態重定位:是在目標程序裝入內存時,由裝入程序對目標程序中的指令和數據的地址進行修改,即把程序的邏輯地址都改成實際的地址。對每個程序來說,這種地址變換只是在裝入時一次完成,在程序運行期間不再進行重定位。

動態重定位:是在程序執行期間每次訪問內存之前進行重定位。這種變換是靠硬體地址變換機構實現的。通常採用一個重定位寄存器,其中放有當前正在執行的程序在內存空間中的起始地址,而地址空間中的代碼在裝入過程中不發生變化。

㈨ 重定位是什麼意思

一、定義:重定位就是把程序的邏輯地址空間變換成內存中的實際物理地址空間的過程,也就是說在裝入時對目標程序中指令和數據的修改過程.他是實現多道程序在內存中同時運行的基礎.重定位有兩種,分別是動態重定位與靜態重定位
二、分類
1、靜態重定位:即在程序裝入內存的過程中完成,是指在程序開始運行前,程序中的各個地址有關的項均已完成重定悉臘位,地址變換通常是飢陸彎在裝入時一次完成的,以後不再改變,故成為靜態重定位.
2、動態重定位:它不是在程序裝入內存時完成的,而是CPU每次訪問內存時 由動態地址變換機構(硬體)自動進行把相對地址轉換為絕對地址.動態重定位需要軟體和硬體相互配合完成.
三、時機
將邏輯地址空間重定位到物理地址空間的時機有三種:
1、程序編譯連接時.
2、程序裝入內存時.
3、程序執行時.
四、擴展閱讀:
重定位是由操作系統安排的.
在裝入程序前,系統會計算未使用的內存,然後將程序裝入,並記下開始地址.在執行有相對地址的指令時,會將所有的地址加個剛才記下的開始地址,就叫重定位.
重定位與EXE文件無關,它是程序裝入時的一種方式.利用重爛悶定位可提高內存空間的使用率.

㈩ C語言編譯執行的全過程是怎樣的

不明白樓主什麼意思,就是先把你的代碼轉為匯編代碼,然後轉為二進制文件,讀入內存執行。

閱讀全文

與重定位編譯的關鍵技術相關的資料

熱點內容
新電腦管家下載好怎麼解壓 瀏覽:526
php獲取介面數據 瀏覽:763
最後的命令 瀏覽:921
如何添加手機app桌面快捷圖標 瀏覽:427
ui設計師與程序員 瀏覽:417
壽司pdf 瀏覽:828
pythonbg是什麼 瀏覽:248
c數值演算法程序大全 瀏覽:785
android整點報時 瀏覽:221
稀土pdf 瀏覽:536
單片機電子鎖 瀏覽:596
通達信機智資金流指標公式源碼 瀏覽:216
php安裝xsl擴展 瀏覽:842
python如何使用help 瀏覽:367
上汽榮威app在哪裡查詢 瀏覽:903
冰櫃壓縮機溫度108 瀏覽:720
阿里雲郵smtp伺服器地址 瀏覽:252
解壓館認知理解 瀏覽:239
為什麼使用非官方伺服器會封號 瀏覽:9
佛山加密文檔軟體 瀏覽:813