CSDN=>FAQ=>FAQ 展示
  • 问题内容:急!请问:知道了函数的绝对地址,怎样用call 来调用此函数?
  • 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=4794683
  • 所属论坛:汇编语言     审核组:其他开发语言
  • 提问者:gyj86     解决者:mydo
  • 感谢:sclzmbie pig4210 DelphiGuy programfanny fhb13 akirya
  • 关键字:函数 参数 调用 帖子 其他开发语言 汇编语言 地址 请问 汇编 call push
  • 答案:

    请问:知道了函数的绝对地址,怎样用call 来调用此函数?
    我知道了user32.dll 里的messageboxA的函数的绝对地址是0x77d36476(00026476+
    77d10000

    我这样写:call  0x77d36476
    可编译不通过,报告 improper operand type错误
    请问如何写代码来完成这种功能 呀?
    我是在vc里嵌的汇编
    ---------------------------------------------------------------

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

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

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

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

    ---------------------------------------------------------------

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

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

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

  • 评价: 有价值 给朵鲜花(0) 无价值 扔个鸡蛋(0)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo