社区
汇编语言
帖子详情
jmp和call指令的问题?
CoomyMorris
2004-04-05 10:25:33
汇编程序中,jmp和call指令后的地址为何可以通过将下一条指令的地址加上本条jmp和call指令后的地址的机器码获得?例如:
:bff816e6 e859edffff call bff80444
:bff816eb c3 ret
bff816eb + ffffed59 = bff80444
...全文
166
4
打赏
收藏
jmp和call指令的问题?
汇编程序中,jmp和call指令后的地址为何可以通过将下一条指令的地址加上本条jmp和call指令后的地址的机器码获得?例如: :bff816e6e859edffffcallbff80444 :bff816ebc3 ret bff816eb+ ffffed59 = bff80444
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
CoomyMorris
2004-04-06
打赏
举报
回复
sx
bsnhk
2004-04-06
打赏
举报
回复
你的地址应该写错了,应该是bff8:16e6和bff8:16eb,跳转指令应该是call bff8:0444
不管源程序中的跳转指令采用何种寻址方式,最终取得的操作数并不是所要跳转的目的地址,而是一个位移量(地址差),也就是说跳转指令最终要寻找的操作数是一个地址差,而不是目的地址,所以,在跳转指令的机器码中,其操作数字段是一个地址差(目的跳转地址-当前ip的值),该跳转指令机器码的执行时会将这个地址差加上当前IP的值(也就是该跳转指令的下一条指令的偏址)将结果保存进IP,从而实现跳转。
所以59edffffh是目的条转地址(即0444h)减去当前ip的值(即16ebh)的差(由于地址量是无符号数,所以结果也是无符号数,所以59edffffh不是补码)。
需要指出的是“bff816eb + ffffed59 = bff80444”是错误的,应该是“16ebh+ffffed59=444h”,因为444h-16ebh=0ffffed59h。
CoomyMorris
2004-04-05
打赏
举报
回复
地址的机器码是跳转的长度?
louisbadbad
2004-04-05
打赏
举报
回复
bff80444是跳转过去的地址。ffffed59是跳转的长度
保护模式Call
Jmp
Ret
指令
的控制转移
简略的显示了 保护模式的下 Call
Jmp
Ret
指令
引起的控制转移
find_esp.zip
寻找系统dll中的
jmp
esp和call esp
指令
地址。直接运行后,输入想要找的dll后,会显示出所有找到的
jmp
esp和call esp
指令
地址。
微机原理与汇编语言中的
指令
JMP
、CALL的区别
汇编语言中,
JMP
是无条件转移
指令
,CALL是子程序调用
指令
。
指令
JMP
、CALL的区别在于,
JMP
指令
控制程序直接跳转到目标地址执行程序,程序总是顺序执行,
指令
本身无堆栈操作过程。CALL
指令
跳转到指定目标地址执行子程序,执行完子程序后,会返回CALL
指令
的下一条
指令
处执行程序,执行CALL
指令
有堆栈操作过程。 举例如下:
JMP
NEAR NEXT;跳转到NEXT执行程序 … NEXT: ;...
call 和
jmp
笔记
转自:http://www.cnblogs.com/banchen/p/6709967.html Call
指令
主要实现对一个函数的调用。
Jmp
指令
主要实现地址的调转。 Call
指令
和
Jmp
指令
的区别 1:Call
指令
和
Jmp
指令
的机器码不同。 2:Call
指令
会对当前
指令
的下一条
指令
的地址进行压栈操作,来实现函数的返回。 相当于 Pus...
汇编基础-
JMP
,CALL,JCC
汇编基础-
JMP
,JCC
JMP
指令
JMP
指令
:修改EIP的值
JMP
指令
只影响了EIP,不影响堆栈和其它通用寄存器
JMP
寄存器/立即数 相当于 MOV EIP,寄存器/立即数 CALL
指令
CALL
指令
和
JMP
指令
都会修改EIP的值 但CALL
指令
会将返回地址(CALL
指令
的下一条
指令
地址)压入堆栈 因此也会引起esp的变化 RET
指令
call调用跳转后执行完相关代码完要返回到call的下一条
指令
时使用ret
指令
ret
指令
相当于pop eip(但是不能这么写) CMP
指令
指令
格式:CMP R/
汇编语言
21,459
社区成员
41,602
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章