數(shù)據(jù)段, 代碼段, 棧段的一點理解

我們知道, 一個程序要運行, 首先要將程序加載進入內(nèi)存中, 然后運行其中的代碼, 同時, 我們的程序也會在運行過程中, 保存一部分?jǐn)?shù)據(jù)到內(nèi)存中.
我們知道, 可以運行的代碼, 例如求解一個方程組, 都是放在代碼段中的
數(shù)據(jù)段中則會存放一些初始化數(shù)據(jù), 例如我們的已經(jīng)初始化的全局變量
而棧段則會存放運行中的堆棧信息, 臨時變量等.
當(dāng)然還會有堆區(qū)等其他區(qū)段, 這里暫且忽略.
對于計算機來講, 所有的代碼和數(shù)據(jù)都可以2進制形式存放在內(nèi)存中, 那么對于某一個特定的內(nèi)存地址, 我們?nèi)绾伪鎰e這個數(shù)據(jù)是代碼還是普通數(shù)據(jù)?

總所周知, cpu 內(nèi)部有若干寄存器, 有些寄存器是通用寄存器, 可以存放普通的數(shù)據(jù), 例如用來存放加法指令的結(jié)果.
而還有些則有自己特定的功能.
對于代碼段來說, cpu 需要知道當(dāng)前的代碼在內(nèi)存中的哪個位置, 這一點, 就是靠的CS, IP 寄存器(8086 CPU, 下同).
例如, 當(dāng)CS 為 0x1000, IP 為 0x0001, 那么下一句代碼的位置就在 CS*0x10+IP = 0x100001 這個地址. CS 就是代碼段地址, 而IP 則是代碼段偏移量, 可以看到, 當(dāng)前有一個代碼段位于 0x10000 處.
當(dāng)cpu 需要從內(nèi)存中讀取某個全局變量時, 則會用到另外一個寄存器, DS, 例如我們有一個全局變量位置在 0x20005 處. 我們?nèi)绻x取可以使用類似下面的指令

mov ds, 0x2000; 給ds 寄存器賦值, 相當(dāng)于 ds=0x2000,實際上沒有這個指令, 并不能直接給ds 賦值, 需要使用其他寄存器中轉(zhuǎn), 類似于 ax=0x2000; ds=ax 這樣. 這里為了方便理解, 就這樣寫了.
mov ax, [5]; 讀取制定內(nèi)存位置的數(shù)據(jù)到寄存器中. [5]表示偏移量, 偏移量是相對于ds 來說, 這里就相當(dāng)于 ax=*((int*)(ds+5))

也就是說, DS 寄存器標(biāo)識了一個段, 我們這里存在一個段在 0x2000 處.
同理, 棧也有寄存器, SP 和 SS, SS 表示棧頂, SP 標(biāo)識偏移量, SS 就標(biāo)識了一個棧段.

這里就存在一個問題, 起始我們是可以任意修改這些寄存器的, 也就是說, 何處是代碼段, 何處是數(shù)據(jù)段是我們自己規(guī)定的, CPU 并不知道, 它只知道CS:IP 這個地方的數(shù)據(jù)需要讀取出來運行, 而 SS:SP 這個位置, 可以讀取一個棧的數(shù)據(jù).
所有的一切, 都只是我們的一廂情愿. 你如果錯誤的將CS:IP 指向了一個數(shù)據(jù)段的地址, 那么CPU 運行時可能就直接異常退出了, 同理, 當(dāng)嘗試從代碼段讀取數(shù)據(jù)時, 也只會讀到一段莫名其妙的數(shù)據(jù).CPU 并不會幫你處理這些異常的行為, 一切都在你自己手里.
還有一個問題, 就是這些寄存器都只有一個起始位置, 并沒有一個能表示長度的寄存器, 特別是對于棧段.例如, 我們規(guī)定0x30000-0x3000F 保存的是棧中的數(shù)據(jù), 0x30010-0x3001F 保存的是代碼, 那么如果我們在棧區(qū)多次pop, 就有可能跑道代碼區(qū)里面去了, 就有可能會錯誤修改代碼區(qū)數(shù)據(jù), 導(dǎo)致程序無法正常運行.

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搪花,一起剝皮案震驚了整個濱河市遏片,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撮竿,老刑警劉巖吮便,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異幢踏,居然都是意外死亡髓需,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門房蝉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僚匆,“玉大人,你說我怎么就攤上這事。” “怎么了锡垄?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵式撼,是天一觀的道長。 經(jīng)常有香客問我娃闲,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任贸桶,我火速辦了婚禮,結(jié)果婚禮上桌肴,老公的妹妹穿的比我還像新娘皇筛。我一直安慰自己,他們只是感情好识脆,可當(dāng)我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布设联。 她就那樣靜靜地躺著善已,像睡著了一般。 火紅的嫁衣襯著肌膚如雪离例。 梳的紋絲不亂的頭發(fā)上换团,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天,我揣著相機與錄音宫蛆,去河邊找鬼艘包。 笑死,一個胖子當(dāng)著我的面吹牛耀盗,可吹牛的內(nèi)容都是我干的想虎。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼叛拷,長吁一口氣:“原來是場噩夢啊……” “哼舌厨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起忿薇,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤裙椭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后署浩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體揉燃,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年筋栋,在試婚紗的時候發(fā)現(xiàn)自己被綠了炊汤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡弊攘,死狀恐怖抢腐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肴颊,我是刑警寧澤氓栈,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站婿着,受9級特大地震影響授瘦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜竟宋,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一提完、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧丘侠,春花似錦徒欣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脂新。三九已至,卻和暖如春粗梭,著一層夾襖步出監(jiān)牢的瞬間争便,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工断医, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留滞乙,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓鉴嗤,卻偏偏與公主長得像斩启,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子醉锅,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學(xué)習(xí)匯編語言》系列視頻的筆記口锭,在此感謝他和像他一樣...
    Gibbs基閱讀 37,216評論 8 114
  • 王爽匯編全書知識點大綱 第一章 基礎(chǔ)知識 機器語言 匯編語言的產(chǎn)生 匯編語言的組成 存儲器 cpu對存儲器的讀寫 ...
    2c3ba901516f閱讀 2,419評論 0 1
  • 組件 計算機是一種數(shù)據(jù)處理設(shè)備,它由CPU和內(nèi)存以及外部設(shè)備組成介杆。CPU負(fù)責(zé)數(shù)據(jù)處理鹃操,內(nèi)存負(fù)責(zé)存儲,外部設(shè)備負(fù)責(zé)數(shù)...
    哆啦灬少A夢閱讀 1,590評論 1 2
  • 做完作業(yè)春哨,時間已是有些晚了荆隘,催著兒子趕緊洗刷,伺候完小家伙后我還得去接姐姐赴背。人家可不領(lǐng)會你的心情椰拒,一邊慢吞...
  • 落葉知秋.樹葉飄零,秋天來臨了. 有人說:秋天是思念的顏色.也許是吧.不然,為什么當(dāng)我看到滿地的枯葉,我會置于...
    豆芽粒閱讀 109評論 0 0