急!请问:知道了函数的绝对地址,怎样用call 来调用此函数?
请问:知道了函数的绝对地址,怎样用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




