关于masm不能直接call imm的问题!

  1. 云栖社区>
  2. 博客列表>
  3. 正文

关于masm不能直接call imm的问题!

大熊猫侯佩 2012-11-27 10:18:00 浏览423 评论0

摘要:     很多人困惑为啥masm不能直接写call 立即数地址的汇编指令,如果你那样 写铁定报错的。但是查看intel指令手册这种指令编码方式是合法正确的。那么 只有推测是masm对此作了限制。     解决的办法有很多,做一个间接调用 call [eax],或者call far xxx,或者直接 写byte码。

    很多人困惑为啥masm不能直接写call 立即数地址的汇编指令,如果你那样

写铁定报错的。但是查看intel指令手册这种指令编码方式是合法正确的。那么

只有推测是masm对此作了限制。

    解决的办法有很多,做一个间接调用 call [eax],或者call far xxx,或者直接

写byte码。

    其他的办法是在gcc内联汇编里写(VC的内联貌似还是不行):

__asm__ __volatile__("call 0x400000");

    但是这种写法会导致目标地址发生变化,要修正地址,即先算出修正增值:

addx,然后调用:

__asm__ __volatile__("call 0x400000+addx");

    最后完美的做法是用nasm,里面可以直接写:

    call 0x400000


用云栖社区APP,舒服~

【云栖快讯】青年们,一起向代码致敬,来寻找第83行吧,云栖社区邀请大神彭蕾、多隆、毕玄、福贝、点评Review你的代码,参与互动者将选取50位精彩回复赠送“向代码致敬”定制T恤1件,最终成为“多隆奖”的小伙伴还将获得由阿里巴巴提供的“多隆奖”荣誉证书和奖杯。  详情请点击

网友评论

大熊猫侯佩
文章855篇 | 关注10
关注
移动测试(Mobile Testing)是为广大企业客户和移动开发者提供真机测试服务的云平台... 查看详情
阿里云数据库内置的智能专家,提供云数据库问题诊断、性能优化、SQL分析、资源分析、优化报告等... 查看详情
通过机器学习和数据建模发现潜在的入侵和攻击威胁,帮助客户建设自己的安全监控和防御体系,从而解... 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
520表白

520表白