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

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

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

大熊猫侯佩 2012-11-27 10:18:00 浏览529 评论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


【云栖快讯】你想见的Java技术专家都在这了,向大佬提问,有问题必答  详情请点击

网友评论

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

阿里云总监课正式启航