看流星社区

 找回密码
 注册账号
查看: 3449|回复: 4

C++内联汇编 CALL 一个地址 这么写为什么出错?

[复制链接]

该用户从未签到

发表于 2011-3-24 11:48:06 | 显示全部楼层 |阅读模式
void CWGForm::OnBUTTONCAllTEST()  
{
    // TODO: Add your control notification handler code here
      _asm
      {  
          CALL 0x004B3910

      }
      
}
C++内联汇编 CALL 一个地址 这么写为什么出错?

该用户从未签到

发表于 2011-3-24 11:48:19 | 显示全部楼层
可能有参数的吧,如果没有,那可能就是那个CALL修改了某些寄存器的值,可以用pushad保存一下

该用户从未签到

发表于 2011-3-24 11:48:29 | 显示全部楼层
DWORD dwCallAddress = 0x004B3910;
DWORD dwRet =0;
_asm
{
    pushad
    call dwCallAddress
    mov dwRet,eax
    popad
}


手写的不知道正确否。自己校验
还有就是如果发现汇编代码有错。那么自己用OD或者别的汇编器看看自己的代码就可以了。

该用户从未签到

发表于 2011-3-24 11:48:43 | 显示全部楼层
C++内联汇编不允许你这样写。。。。

你必须先把值传递给一个通用寄存器。。。。

然后call这个汇编指令才会生效。。。比如
mov ebx,0x4000000
call ebx

该用户从未签到

发表于 2011-3-24 11:48:55 | 显示全部楼层
学习了,还没用C++内联过汇编呢。
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-25 19:13

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表