x86/x64 Call Jmp 指令区别
Call指令主要實(shí)現(xiàn)對一個(gè)函數(shù)的調(diào)用。Jmp指令主要實(shí)現(xiàn)地址的調(diào)轉(zhuǎn)。
Call指令和Jmp指令的區(qū)別
1:Call指令和Jmp指令的機(jī)器碼不同。
2:Call指令會(huì)對當(dāng)前指令的下一條指令的地址進(jìn)行壓棧操作,來實(shí)現(xiàn)函數(shù)的返回。
相當(dāng)于
Push eip+5
Jmp xxxxxxxx
Call指令的二進(jìn)制形態(tài)(機(jī)器碼)
1:X86
Call --- e8/ ff15(但是其他比如 call eax 等是不相同的)
E8 xxxxxxxx 其中xxxxxxxx是偏移地址
計(jì)算方法:目標(biāo)地址-當(dāng)前地址-5 = 偏移地址
Ff15 xxxxxxxx 其中xxxxxxxx是絕對地址(FF15會(huì)對當(dāng)前的這個(gè)絕對地址解*號(hào),也就是絕對地址[目標(biāo)地址])
Jmp ---e9 /ff25
E9 xxxxxxxx其中xxxxxxxx是偏移地址
計(jì)算方法:目標(biāo)地址-當(dāng)前地址-5 = 偏移地址
Ff25 xxxxxxxx其中xxxxxxxx是絕對地址(FF15會(huì)對當(dāng)前的這個(gè)絕對地址解*號(hào),也就是絕對地址[目標(biāo)地址])
2:X64
E8 xxxxxxxx 其中xxxxxxxx是偏移地址
計(jì)算方法:目標(biāo)地址-當(dāng)前地址-5 = 偏移地址
Ff15 xxxxxxxx 其中xxxxxxxx是相對地址(FF15會(huì)對當(dāng)前的這個(gè)相對地址解*號(hào),也就是相對地址[目標(biāo)地址])
Ff25 xxxxxxxx其中xxxxxxxx是相對地址(FF15會(huì)對當(dāng)前的這個(gè)相對地址解*號(hào),也就是相對地址[目標(biāo)地址])
總結(jié)
以上是生活随笔為你收集整理的x86/x64 Call Jmp 指令区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高效C++无锁队列实现-moodycam
- 下一篇: Pylint在Windows上的安装