[OS64位][003] org 0x7c00 有什么用谴轮?

學(xué)習(xí)筆記

使用教材(配書源碼以及使用方法)
《一個(gè)64位操作系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)》
http://www.ituring.com.cn/book/2450
http://www.reibang.com/p/28f9713a9171

參考資料

Setting segment registers after ORG instruction

https://stackoverflow.com/questions/54045259/setting-segment-registers-after-org-instruction

org 指令的作用其實(shí)是 影響標(biāo)號(hào)label的值

如果你的代碼中有一個(gè)標(biāo)號(hào)叫做bootmsg,它的值是samll offset:

  • org 0的時(shí)候吏廉,這個(gè)標(biāo)號(hào)的值被解讀成 0x0000+samll offset啰脚;
  • org 0x7c00時(shí),這個(gè)標(biāo)號(hào)的值被解讀成0x7c00+samll offset
  • 這個(gè) samll offset其實(shí)就是標(biāo)號(hào)所在處距離代碼開始處的代碼字節(jié)數(shù)

org 到底影響了誰谱轨?

  • 第一,org指令影響的是 標(biāo)號(hào)的絕對(duì)地址
  • 第二吠谢,org 指令不會(huì)影響寄存器土童,說白了,不會(huì)影響CS 工坊、DS献汗、ES、SS

為什么org后面要加個(gè)0x7c00王污?

  • 這個(gè)問題的本質(zhì)是問為什么值是0x7c00罢吃,不是0x0000,或者0x1234昭齐,也不是0xABCD

阮一峰:為什么主引導(dǎo)記錄的內(nèi)存地址是0x7C00尿招?
http://www.ruanyifeng.com/blog/2015/09/0x7c00.html

容易混淆的概念

  • 首先,無論你的匯編代碼頭部加不加一句org 0x ★♂☆◆指令,你的主引導(dǎo)扇區(qū)代碼都會(huì)被BIOS 自動(dòng)加載到內(nèi)存0x0000:7C00處就谜,自動(dòng)加載這是焊死在硬件上面的規(guī)范怪蔑,說白了,自動(dòng)加載與org指令半點(diǎn)關(guān)系都沒有丧荐;

  • 其次缆瓣,是不是主引導(dǎo)扇區(qū)代碼,看的是你扇區(qū)最后兩個(gè)字節(jié)是不是0x55aa篮奄,也和org指令沒有半點(diǎn)關(guān)系捆愁;

  • 然后割去,有些主引導(dǎo)扇區(qū)匯編代碼不加org指令也可以正常運(yùn)行窟却,就是因?yàn)槟切┐a里面沒有涉及標(biāo)號(hào)label 相關(guān)的代碼,不需要對(duì) 標(biāo)號(hào)label 進(jìn)行絕對(duì)地址的計(jì)算

[舉例]下面這就是沒有使用label也沒有使用org指令的主引導(dǎo)扇區(qū)代碼
http://www.reibang.com/p/207aaf0f986b

  • 接著呻逆,標(biāo)號(hào)是標(biāo)號(hào)夸赫,標(biāo)號(hào)不是寄存器,標(biāo)號(hào)是程序員可以自由任意隨便取名字的咖城,取的那個(gè)名字只是幫助你閱讀代碼用的茬腿,在代碼經(jīng)過匯編編譯器之后標(biāo)號(hào)會(huì)被解讀成一個(gè)具體的數(shù)值,org影響的就是最后算標(biāo)號(hào)的那個(gè)具體數(shù)值宜雀;

  • 最后切平,這個(gè)標(biāo)號(hào)代碼的那個(gè)具體的數(shù)值是什么?
    是一個(gè)offset辐董,即當(dāng)前標(biāo)號(hào)所在代碼行距離代碼開始處的字節(jié)數(shù)

為什么需要 org 指令悴品?

  • 假設(shè),你的標(biāo)號(hào)距離你的代碼開始處是八個(gè)字節(jié)简烘,那個(gè)標(biāo)號(hào)的值原本應(yīng)該就是0x08的苔严,這個(gè)原本可以是不寫org指令,也可以是寫個(gè)org 0x0000孤澎,反正無論哪種這時(shí)標(biāo)號(hào)會(huì)被解讀成數(shù)值0x00000008届氢;

  • 由于你是主引導(dǎo)扇區(qū)的代碼,你的代碼被自動(dòng)加載到內(nèi)存0x0000:7C00處了覆旭,代碼被加載到內(nèi)存退子,實(shí)際上是說機(jī)器碼被加載到內(nèi)存,也就說是說無論你的代碼被加載到0x0000:7C00還是被加載到0x1234:5678這里型将, 數(shù)值0x00000008還是數(shù)值0x00000008絮供;

  • 那么問題就來了?
    數(shù)值0x00000008是一個(gè)絕對(duì)地址茶敏,你現(xiàn)在代碼全部在0x0000:7C00壤靶,你真正想要找的標(biāo)號(hào)是被放到了從0x0000:7C00開始后的八個(gè)字節(jié)的地方,它應(yīng)該是0x00007C000+0x00000008 = 0x00007C08而不是0x00000008

  • 那么如何解決惊搏?

[1] 要么直接修改標(biāo)號(hào)的絕對(duì)地址贮乳,在使用標(biāo)號(hào)賦值的時(shí)候忧换,強(qiáng)制加上0x7c00,比如 mov ax,bootmsg 寫成 mov ax,bootmsg+0x7C00向拆;
[2] 要么亚茬,在代碼開頭使用org 0x7C00,代碼還是寫mov ax ,bootmsg 但是它會(huì)悄悄地把bootmsg解讀成 bootmsg+0x7C00

如何驗(yàn)證猜想

  • [OS64位][004]調(diào)試源碼:使用工具 nasm 浓恳、bochs 驗(yàn)證 org 0x7c00 對(duì)標(biāo)號(hào)StartBootMessage 最終數(shù)值的影響

http://www.reibang.com/p/559a45fe23f3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末刹缝,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颈将,更是在濱河造成了極大的恐慌梢夯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晴圾,死亡現(xiàn)場離奇詭異颂砸,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)死姚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門人乓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人都毒,你說我怎么就攤上這事色罚。” “怎么了账劲?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵戳护,是天一觀的道長。 經(jīng)常有香客問我涤垫,道長姑尺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任蝠猬,我火速辦了婚禮切蟋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榆芦。我一直安慰自己柄粹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布匆绣。 她就那樣靜靜地躺著驻右,像睡著了一般。 火紅的嫁衣襯著肌膚如雪崎淳。 梳的紋絲不亂的頭發(fā)上堪夭,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼森爽。 笑死恨豁,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼含鳞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了计福?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤徽职,失蹤者是張志新(化名)和其女友劉穎象颖,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體活箕,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡力麸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年可款,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了育韩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡闺鲸,死狀恐怖筋讨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情摸恍,我是刑警寧澤悉罕,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站立镶,受9級(jí)特大地震影響壁袄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜媚媒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一嗜逻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧缭召,春花似錦栈顷、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至搪哪,卻和暖如春靡努,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工惑朦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留神年,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓行嗤,卻偏偏與公主長得像已日,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子栅屏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354