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

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

我这样写:call 0x77d36476
可编译不通过,报告 improper operand type错误
请问如何写代码来完成这种功能 呀?
我是在vc里嵌的汇编
...全文
404 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhb13 2006-06-05
  • 打赏
  • 举报
回复
以前的帖子说过,楼主可以查查以前关于调用DLL的帖子。
  • 打赏
  • 举报
回复
typedef int (PASCAL *TYPE_MYFUN)(HWND,LPCTSTR,LPCTSTR,UINT);
TYPE_MYFUN MyFun=0x77d36476;
MyFun( 0, 0, 0, 0);
  • 打赏
  • 举报
回复
要先用LoadLibrary装载这个DLL,把这个DLL映射到进程的地址空间,然后就可以了。
programfanny 2006-06-04
  • 打赏
  • 举报
回复
在汇编里直接使用地址调用函数.
pig4210 2006-06-02
  • 打赏
  • 举报
回复
函数调用前参数先入栈啊,正如二楼所说,三个必要参数要先push。再call。
  不过我还是觉得不能成功,不是说windows的保护模式嘛,每个程序都独立拥有4G寻址,为你程序开辟空间时因为你程序没有导入函数表,可能未将messageboxA函数写入这个程序的所属空间。也就是说可能那个地址不允许访问,或根本就不存在入口。这样,用绝对地址去访问是不成功的,除非你确定这个地址一定存在入口并允许访问。
sclzmbie 2006-06-01
  • 打赏
  • 举报
回复
write C++ in VS and then look up the generated assembly code. Copy&Paste!
大熊猫侯佩 2006-06-01
  • 打赏
  • 举报
回复
__asm
{
push 0
lea eax,szcp
push eax
lea ecx,sztxt
push ecx
push 0
mov ebx,0x77d36476
call ebx
}

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧