《匯編語言》王爽,學(xué)習(xí)筆記(跳轉(zhuǎn)指令)

在別的語言中蘸吓,程序進(jìn)行跳轉(zhuǎn)被看作是一種邏輯上的漏洞善炫,想必學(xué)習(xí)過C語言的人都有這種認(rèn)識,就是最好不要在程序中出現(xiàn)GOTO這個指令库继,不過箩艺,跳轉(zhuǎn)在匯編語言中卻是一種很重要的語法,理解跳轉(zhuǎn)指令才能更好的駕馭匯編宪萄。

1.jmp指令

jmp指令是無條件的跳轉(zhuǎn)指令艺谆,jmp分為3種跳轉(zhuǎn)模式,一種是短轉(zhuǎn)移拜英,一種是近轉(zhuǎn)移静汤,最后是遠(yuǎn)轉(zhuǎn)移。首先介紹一下前兩種跳轉(zhuǎn):

jmp short 標(biāo)號?????????????? 居凶;短轉(zhuǎn)移虫给,程序跳轉(zhuǎn)到標(biāo)號標(biāo)注的地方,和C語言中的goto指令類似

jmp near prt 標(biāo)號?????????? 侠碧;近轉(zhuǎn)移抹估,和短轉(zhuǎn)移類似

這兩種跳轉(zhuǎn)指令是不需要加上跳轉(zhuǎn)的地址的,他們屬于段內(nèi)跳轉(zhuǎn)指令弄兜,也就是說药蜻,他們只能改變IP的指向瓷式,而不改變CS的指向,他們跳轉(zhuǎn)依靠的是位移语泽,這是編譯器在編譯的時候處理的事情贸典,編譯器會將你的標(biāo)號地址減去jmp指令的地址,計算出之間位移踱卵,然后在翻譯成機(jī)器語言瓤漏。位移為正就是向下跳轉(zhuǎn),位移為負(fù)就是向上跳轉(zhuǎn)颊埃。short和near prt之間的差別就是short跳轉(zhuǎn)的極限是2^7(8位位移)蔬充,near的極限是2^15(16位位移)。

jmp far prt 標(biāo)號???????????? 班利;遠(yuǎn)轉(zhuǎn)移饥漫,和短轉(zhuǎn)移意思類似,只是細(xì)節(jié)不同

遠(yuǎn)轉(zhuǎn)移罗标,又稱為段間轉(zhuǎn)移庸队,它不僅僅會修改IP指向,還會修改CS的指向闯割,這個跳轉(zhuǎn)的依據(jù)就是實實在在的地址彻消。

那么,現(xiàn)在請思考為什么計算機(jī)會提供3種跳轉(zhuǎn)模式宙拉,或者說宾尚,為什么要出現(xiàn)依靠位移的跳轉(zhuǎn)指令,全部依靠絕對地址來跳轉(zhuǎn)難道不好嗎谢澈?

工程師絕對不會做出費(fèi)力不討好的事情煌贴,那么出現(xiàn)依靠位移的跳轉(zhuǎn)指令就一定有他的優(yōu)勢存在,思考以下情形锥忿,程序在內(nèi)存中運(yùn)行之時是需要被加載的牛郑,這個加載到的內(nèi)存地址是不確定的,也就是說在這種情況之下敬鬓,我們的遠(yuǎn)轉(zhuǎn)移指令很有可能找尋不到我們想要找尋的地址淹朋,那這時,相等地址(位移)的優(yōu)勢就體現(xiàn)出來了钉答,我們可以依靠位移來精確定位這個段中任意一個地址(在內(nèi)存中的浮動裝配)础芍,而不需要具體的地址,但是這也引發(fā)了一個很奇怪的程序希痴,我們最后再來介紹者甲。

2.loop,jcxz指令

loop指令春感,顧名思義砌创,就是循環(huán)指令虏缸,語法和jmp指令類似:

loop 標(biāo)號???????????????????????? ;跳轉(zhuǎn)到標(biāo)號處

還記得前面介紹的CX寄存器嗎嫩实,這里就是輪到他大顯生手的地方了刽辙,loop指令是依靠CX的值來判斷循環(huán)次數(shù)的,只要CX不為0甲献,那么loop就執(zhí)行跳轉(zhuǎn)宰缤,那么loop指令用偽代碼來描述就是:

if(CX != 0)? dec CX? jmp 標(biāo)號??????? 晃洒;dec是自減的意思

那么有了CX不為0慨灭,則跳轉(zhuǎn)的指令,有沒有另一個當(dāng)CX等于0時球及,跳轉(zhuǎn)的指令氧骤?當(dāng)然,jcxz指令就是這種功能吃引,看字面意思就是jmp (cx = zore)筹陵,jcxz指令用法和jmp完全一致,只是jcxz執(zhí)行之時首先會去檢查CX寄存器的值镊尺。

3.一段奇怪的程序

好的朦佩,現(xiàn)在是不是很好奇之前所提到過的那個很奇怪的程序,那么我們現(xiàn)在開始介紹庐氮,想必在理解過這段奇怪的程序之后语稠,你會對jmp這個指令有著更加深入的理解。

這是這本書的作者弄砍,王爽老師提供的程序颅筋,下面上圖:

一個奇怪的程序

現(xiàn)在思考,這個程序運(yùn)行是怎么樣運(yùn)行输枯?他能正常退出嗎议泵,也就是執(zhí)行到程序退出的出口。

如果你認(rèn)為它可以正常的退出桃熄,那么恭喜你先口,你已經(jīng)理解jmp指令了,如果你認(rèn)為它是在標(biāo)號S1,S2處不斷的循環(huán)瞳收,那么請仔細(xì)回顧一下一開始所說的短轉(zhuǎn)移指令碉京。

是的,這里的短轉(zhuǎn)移指令最后翻譯出來的意思是向上移動S2-S1(地址)個字節(jié)螟深,于是程序最后就在標(biāo)號S處向上跳轉(zhuǎn)到了這個段的最開頭谐宙,也就是程序的出口,成功退出界弧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凡蜻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子划栓,更是在濱河造成了極大的恐慌,老刑警劉巖蒋歌,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異委煤,居然都是意外死亡堂油,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門称诗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來头遭,“玉大人寓免,你說我怎么就攤上這事〖莆” “怎么了袜香?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長蜈首。 經(jīng)常有香客問我,道長欢策,這世上最難降的妖魔是什么赏淌? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮六水,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掷贾。我一直安慰自己,他們只是感情好想帅,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著旨剥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪泞边。 梳的紋絲不亂的頭發(fā)上疗杉,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機(jī)與錄音梢什,去河邊找鬼。 笑死嗡午,一個胖子當(dāng)著我的面吹牛冀痕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播言蛇,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼僻他,長吁一口氣:“原來是場噩夢啊……” “哼腊尚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起婿斥,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎娇妓,沒想到半個月后活鹰,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡华望,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年赖舟,在試婚紗的時候發(fā)現(xiàn)自己被綠了蓬戚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宾抓。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡豫喧,死狀恐怖幢泼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缕棵,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布篙程,位于F島的核電站别厘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏触趴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一爽冕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扇售,春花似錦嚣艇、人聲如沸承冰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贰谣。三九已至,卻和暖如春吱抚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背秘豹。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留啄刹,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓袱讹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親捷雕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

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

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學(xué)習(xí)匯編語言》系列視頻的筆記佳头,在此感謝他和像他一樣...
    Gibbs基閱讀 37,144評論 8 114
  • 王爽匯編全書知識點大綱 第一章 基礎(chǔ)知識 機(jī)器語言 匯編語言的產(chǎn)生 匯編語言的組成 存儲器 cpu對存儲器的讀寫 ...
    2c3ba901516f閱讀 2,409評論 0 1
  • 計算機(jī)通過執(zhí)行指令序列來使機(jī)器得以工作康嘉,所以對于每一系列的計算機(jī)都有指定的一組指令集供計算機(jī)使用,這組指令...
    未來科技工作室閱讀 7,959評論 1 10
  • 時光如梭敷钾,從我們第一次的相認(rèn)相知,到現(xiàn)在一直的說說笑笑阻荒,打打鬧鬧,仿佛回憶就像昨天侨赡。 我很開心——...
    張雅文閱讀 255評論 0 0
  • 圖片發(fā)自簡書App 一一一讀唐征祥《冤桃》有感 滿樹爛漫不為他, 惟引蜂蝶來自家辆毡。 一襲粉袍立暖陽, 幾朵嬌紅顫纖...
    無影樹閱讀 885評論 7 8