日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

靜態(tài)重定位是計(jì)算機(jī)編程中的一個(gè)重要概念,它指的是在程序加載時(shí),將程序中的符號(hào)(函數(shù)名、全局變量等)綁定到實(shí)際的內(nèi)存地址上的過(guò)程。在編譯器完成編譯后,生成的可執(zhí)行文件中存儲(chǔ)了程序的二進(jìn)制代碼和相關(guān)的符號(hào)信息。而靜態(tài)重定位則是在程序運(yùn)行之前,根據(jù)實(shí)際的內(nèi)存布局,將這些符號(hào)綁定到正確的內(nèi)存地址上,以確保程序在執(zhí)行時(shí)能夠正確地訪(fǎng)問(wèn)這些符號(hào)所在的內(nèi)存位置。

靜態(tài)重定位通常在操作系統(tǒng)加載可執(zhí)行文件時(shí)發(fā)生。當(dāng)一個(gè)可執(zhí)行文件被加載到內(nèi)存中時(shí),操作系統(tǒng)會(huì)解析可執(zhí)行文件的結(jié)構(gòu),將程序的代碼段和數(shù)據(jù)段等內(nèi)容放置在合適的內(nèi)存地址上。同時(shí),操作系統(tǒng)也會(huì)查找并解析可執(zhí)行文件中存儲(chǔ)的符號(hào)表,將其中的符號(hào)與內(nèi)存中的地址進(jìn)行綁定。

下面以一個(gè)簡(jiǎn)單的C語(yǔ)言程序?yàn)槔瑏?lái)具體說(shuō)明靜態(tài)重定位的過(guò)程。假設(shè)我們有以下的C語(yǔ)言程序,保存為example.c文件:

#include <stdio.h>

int globalVar = 10;

void func() {
    printf("Hello, world!
");
}

int main() {
    func();
    printf("The value of globalVar is: %d
", globalVar);
    return 0;
}

登錄后復(fù)制

我們可以通過(guò)GCC編譯器將其編譯為可執(zhí)行文件。打開(kāi)終端,進(jìn)入文件所在的目錄,輸入以下命令:

gcc -o example example.c

登錄后復(fù)制

編譯完成后,我們得到了一個(gè)名為example的可執(zhí)行文件。這個(gè)可執(zhí)行文件中包含了程序的二進(jìn)制代碼以及相關(guān)的符號(hào)信息。

接下來(lái),我們通過(guò)objdump命令查看這個(gè)可執(zhí)行文件的內(nèi)容,輸入以下命令:

objdump -d example

登錄后復(fù)制

運(yùn)行后可以看到類(lèi)似以下的輸出:

...
0804860d <func>:
 804860d:       55                      push   %ebp
 804860e:       89 e5                   mov    %esp,%ebp
 8048610:       83 ec 10                sub    $0x10,%esp
 8048613:       c7 04 24 20 87 04 08    movl   $0x8048720,(%esp)
 804861a:       e8 d1 fe ff ff          call   80484f0 <puts@plt>
 804861f:       c9                      leave
 8048620:       c3                      ret

08048621 <main>:
 8048621:       55                      push   %ebp
 8048622:       89 e5                   mov    %esp,%ebp
 8048624:       83 ec 10                sub    $0x10,%esp
 8048627:       e8 e1 ff ff ff          call   804860d <func>
 804862c:       8d 05 fc ff ff ff       lea    -0x4(%ebp),%eax
 8048632:       8b 00                   mov    (%eax),%eax
 8048634:       50                      push   %eax
 8048635:       8d 45 f4                lea    -0xc(%ebp),%eax
 8048638:       50                      push   %eax
 8048639:       68 00 88 04 08          push   $0x8048800
 804863e:       e8 7d fe ff ff          call   804841e <printf@plt>
 8048643:       83 c4 10                add    $0x10,%esp
 8048646:       b8 00 00 00 00          mov    $0x0,%eax
 804864b:       c9                      leave
 804864c:       c3                      ret
...

登錄后復(fù)制

上述代碼是通過(guò)objdump生成的可執(zhí)行文件的匯編代碼。在這段匯編代碼中,我們可以看到func函數(shù)和main函數(shù)的定義和具體實(shí)現(xiàn)。在main函數(shù)內(nèi)部,有一行代碼call 804860d c915ef6d477a95168a275e39c73b95bf,這表示程序會(huì)調(diào)用func函數(shù)。而在func函數(shù)的開(kāi)頭也有一行代碼movl $0x8048720,(%esp),這表示程序?qū)?code>$0x8048720的值存儲(chǔ)到棧頂。

現(xiàn)在我們來(lái)分析一下這里的符號(hào)和地址的關(guān)系。在main函數(shù)中,我們需要調(diào)用func函數(shù),而func函數(shù)的地址是0x0804860d,這個(gè)地址是與機(jī)器碼相關(guān)的實(shí)際內(nèi)存地址。在這個(gè)例子中,靜態(tài)重定位的過(guò)程就是將call指令中的804860d換成實(shí)際的內(nèi)存地址0x0804860d的過(guò)程。

運(yùn)行可執(zhí)行文件時(shí),操作系統(tǒng)會(huì)讀取這個(gè)可執(zhí)行文件,將其加載到內(nèi)存中。在這個(gè)過(guò)程中,操作系統(tǒng)會(huì)找到程序中的符號(hào)和這些符號(hào)對(duì)應(yīng)的內(nèi)存地址,將程序與庫(kù)函數(shù)進(jìn)行鏈接,最終生成一個(gè)可執(zhí)行的進(jìn)程。通過(guò)這個(gè)過(guò)程,靜態(tài)重定位完成,符號(hào)與內(nèi)存地址之間建立了正確的映射關(guān)系。

總的來(lái)說(shuō),靜態(tài)重定位是計(jì)算機(jī)程序在加載和運(yùn)行時(shí)的重要步驟。它的目的是為了確保程序能夠正確地訪(fǎng)問(wèn)需要的符號(hào),并將其綁定到正確的內(nèi)存地址上。通過(guò)這個(gè)過(guò)程,程序能夠在運(yùn)行時(shí)正常執(zhí)行,實(shí)現(xiàn)預(yù)期的功能。

分享到:
標(biāo)簽:定位 時(shí)會(huì) 靜態(tài)
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定