社区
汇编语言
帖子详情
不明白:为什么call指令中的地址数据是相对的而不是绝对地址??? call指令不需要重定位吗?
chtw999
2005-04-14 08:56:51
罗云彬《win32汇编》530页,讲重定位问题时:“存取局部变量和参数的指令中并不包含绝对地址;call指令中的地址数据也是相对的。”
不明白:为什么call指令中的地址数据也是相对的。???
call指令中的地址数据相对于哪里??? 怎么表示的???
...全文
1321
6
打赏
收藏
不明白:为什么call指令中的地址数据是相对的而不是绝对地址??? call指令不需要重定位吗?
罗云彬《win32汇编》530页,讲重定位问题时:“存取局部变量和参数的指令中并不包含绝对地址;call指令中的地址数据也是相对的。” 不明白:为什么call指令中的地址数据也是相对的。??? call指令中的地址数据相对于哪里??? 怎么表示的???
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhang_jiang
2005-04-15
打赏
举报
回复
http://www7.informatik.uni-erlangen.de/~msdoerfe/embedded/386html/toc.htm
chtw999
2005-04-15
打赏
举报
回复
call可以分为:
(1). near relative call
(2). near absolute call
(3). ...
看英文的解释很是明白,但看 《80x86汇编语言程序设计》就看不懂,汉语的翻译体现不出来!!
请楼上推荐本这样讲汇编指令的英文书!!多谢!!
VxD1
2005-04-15
打赏
举报
回复
罗云彬《win32汇编》530页,讲重定位问题时:“存取局部变量和参数的指令中并不包含绝对地址;
>>局部变量和参数通过堆栈访问
call指令中的地址数据也是相对的。”
不明白:为什么call指令中的地址数据也是相对的。???
call指令中的地址数据相对于哪里??? 怎么表示的???
>>这个问题你看看pe文件格式就明白了
zhang_jiang
2005-04-14
打赏
举报
回复
call可以分为:
(1). near relative call
(2). near absolute call
(3). ...
只有(1)用到相对地址.
关于如何区分不同的call, 他们的opcode不同.
如near relative call的opcode 是 0xE8
你的例子中.
0040101a e8e1fffff call 00401000
opcode是E8, 则用相对地址0xFFFFFFE1,复数,往会跳...
chtw999
2005-04-14
打赏
举报
回复
win32中的call指令是不是都是直接段内调用 的???这样就不用重定位了。
chtw999
2005-04-14
打赏
举报
回复
在<<widows环境下32位汇编语言程序设计>>的529页提到了关于远程线程的代码重定向的问题,其中列出了下面的列子:
dwVar dd ?
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Proc1 proc _dwParam
local @dwLocal
mov eax,dwVar
mov eax,@dwLocal
mov eax,_dwParam
ret
Proc1 endp
invoke Proc1,1234
然后,编译,反汇编则是:
00400ffc 0000
00401000 55 push ebp
00401001 8eec mov ebp,esp
00401003 83c4fc add esp,fffffffc
0401006 a1fc0f4000 mov eax,dword ptr [00400ffc]
0040100b 8b45fc mov eax,dowrd ptr[ebp-04]
0040100e 8b4508 mov eax,dword ptr[ebp+08]
00401011 c9 leave
00401012 c20400 ret 0004
00401015 68d2040000 push 000004d2
0040101a e8e1fffff call 00401000
在这里,我不理解最后一个Call指令,这里Call总是让程序转到0041000去执行,那么怎么样保证这个call调用的地方是对的那?
然后:
dwVar dd ?
call @f
@@:
pop ebx
sub ebx,offset @b
mov eax,[ebx+offset dwVar]
这里编译之后:
00401000 000000 BYTE 4 DUP(0)
00401004 e800000000 call 00401009
00401009 5b pop ebx
0040100a 81eb0910400 sub ebx,00401009
00401010 8b830010400 mov eax,dword ptr[ebx+00401000]
call指令又是去调用00401009 那么,怎么保证可以执行到:
004010049 5b pop ebx
我知道有 段内直接近调用 和一个 段内间接近调用 ,这里应该是属于前者吧??(<<80x86汇编语言程序设计>>清华大学出版社 第115页讲过)
可是,都是 call 那么怎么区分它们??
智慧校园综合管理系统V4 企业增强功能包
智慧校园综合管理系统V4 企业增强功能包
地下铲运机,全球前14强生产商排名及市场份额(by QYResearch).docx
地下铲运机,全球前14强生产商排名及市场份额(by QYResearch)
长春市L1到L5五级街道街区分区
数据
集shp格式
数据
本资源为长春市L1到L5五级街道街区分区
数据
集SHP格式
数据
。
数据
涵盖长春市全域范围,包含从省级到区级、街道级、社区级、网格级共五级行政区划边界矢量
数据
,
数据
精度高、边界清晰完整,包含完整的地名、行政区划代码、面积等属性字段。
数据
为标准Shapefile格式,可在ArcGIS、QGIS、SuperMap等GIS软件
中
直接打开编辑,适用于城市规划、人口统计、商业选址、物流配送、区域分析、GIS空间分析等多种应用场景,是城市数字化管理与空间分析的重要基础
数据
。
如何全面了解自身科研能力?实现精准的科研资源匹配?.docx
如何全面了解自身科研能力?实现精准的科研资源匹配?
智慧校园图书与学生综合管理系统 V6 Final 的完整项目文件清单
智慧校园图书与学生综合管理系统 V6 Final 的完整项目文件清单
汇编语言
21,500
社区成员
41,619
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章