CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

急!请问:知道了函数的绝对地址,怎样用call 来调用此函数?

楼主gyj86(guo)2006-06-01 18:46:13 在 其他开发语言 / 汇编语言 提问

请问:知道了函数的绝对地址,怎样用call   来调用此函数?  
  我知道了user32.dll   里的messageboxA的函数的绝对地址是0x77d36476(00026476+  
  77d10000  
  )  
  我这样写:call     0x77d36476  
  可编译不通过,报告   improper   operand   type错误  
  请问如何写代码来完成这种功能   呀?  
  我是在vc里嵌的汇编 问题点数:100、回复次数:7Top

1 楼mydo(侯佩|hopy|ks)回复于 2006-06-01 19:22:45 得分 50

__asm  
  {  
  push   0  
  lea     eax,szcp  
  push   eax  
  lea     ecx,sztxt  
  push   ecx  
  push   0  
  mov     ebx,0x77d36476  
  call   ebx  
  }Top

2 楼sclzmbie(忘我)回复于 2006-06-01 23:09:45 得分 10

write   C++   in   VS   and   then   look   up   the   generated   assembly   code.   Copy&Paste!Top

3 楼pig4210(triones)回复于 2006-06-02 19:49:36 得分 20

函数调用前参数先入栈啊,正如二楼所说,三个必要参数要先push。再call。  
    不过我还是觉得不能成功,不是说windows的保护模式嘛,每个程序都独立拥有4G寻址,为你程序开辟空间时因为你程序没有导入函数表,可能未将messageboxA函数写入这个程序的所属空间。也就是说可能那个地址不允许访问,或根本就不存在入口。这样,用绝对地址去访问是不成功的,除非你确定这个地址一定存在入口并允许访问。Top

4 楼DelphiGuy()回复于 2006-06-04 12:22:53 得分 5

要先用LoadLibrary装载这个DLL,把这个DLL映射到进程的地址空间,然后就可以了。  
  Top

5 楼programfanny()回复于 2006-06-04 20:15:19 得分 5

在汇编里直接使用地址调用函数.Top

6 楼fhb13(游途道标)回复于 2006-06-05 12:59:45 得分 5

以前的帖子说过,楼主可以查查以前关于调用DLL的帖子。Top

7 楼akirya(坏[其实偶不是什么所谓的坏人])回复于 2006-06-05 17:32:16 得分 5

typedef   int   (PASCAL   *TYPE_MYFUN)(HWND,LPCTSTR,LPCTSTR,UINT);  
  TYPE_MYFUN   MyFun=0x77d36476;  
  MyFun(   0,   0,   0,   0);Top

相关问题

关键词

得分解答快速导航

  • 帖主:gyj86
  • mydo
  • sclzmbie
  • pig4210
  • DelphiGuy
  • programfanny
  • fhb13
  • akirya

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo