首页
社区
课程
招聘
[求助]怎么给固定地址内存赋值
发表于: 2015-3-9 23:21 3233

[求助]怎么给固定地址内存赋值

2015-3-9 23:21
3233
HMODULE handle=LoadLibraryW(L"user32.dll");
GetProcAddress(handle,"MessageBoxExA");
_asm{
push    eax
mov     ebx, eax
pop     eax
}
想把ebx的值(就是MessageBoxExA的地址)把其保存在固定内存地址(如[12345678]),不知道这个[12345678]怎么分配,
最后是想直接call [12345678]

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 398
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
mov dword prt [12345678],ebx
2015-3-9 23:38
0
雪    币: 10
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=zbig;1357810]mov dword prt [12345678],ebx[/QUOTE]

编译不能通过,显示 不正确的操作数类型,好像第一个操作数不能直接那样写
2015-3-9 23:51
0
雪    币: 398
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
那这样再试一下。
mov edi,0x12345678;
mov dword prt [edi],ebx;  或者 mov dword prt ds:[edi],ebx;

我试了一下,下面这样就可以了。
        HMODULE handle=LoadLibraryW(L"user32.dll");
        GetProcAddress(handle,"MessageBoxExA");
        _asm{
                push    eax;
                mov     ebx, eax;
                pop     eax;
                mov dword  ptr ds:[00405000],ebx;
        }
2015-3-10 00:09
0
雪    币: 10
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
[QUOTE=zbig;1357817]那这样再试一下。
mov edi,0x12345678;
mov dword prt [edi],ebx;  或者 mov dword prt ds:[edi],ebx;

我试了一下,下面这样就可以了。
        HMODULE handle=LoadLibraryW(L"user32.dll&...[/QUOTE]

请问下[00405000]这个地址要提前分配吗?怎么分配?还是直接可以用
2015-3-10 00:20
0
雪    币: 398
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
这个地址我只是临时乱写的,你程序实际使用的时候,不能这样写的,否则有时候程序里压根没用到这个内存,会出异常的,建议先定义个全局变量,然后把EBX的值存储到全局变量里就OK了。
2015-3-10 00:24
0
雪    币: 719
活跃值: (777)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
Dword x;
mov dword ptr[x],EAX
2015-3-10 00:34
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
DWORD dwAddr;
__asm mov dwAddr,ebx
2015-3-10 00:40
0
雪    币: 66
活跃值: (41)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
你们怎么那么傻呢。汇编多难看啊
*(PDWORD)(0x123456789) =  111111;
2015-3-10 12:12
0
雪    币: 10
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我是想call MessageBoxExA的地址,win7下每次都变,然后这句要写成机器码的形式,所以想写成call 【内存】的形式,但内存地址不知道能不能给固定地址分配内存
2015-3-10 13:58
0
雪    币: 398
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
你到底是想用C++编程还是用汇编编程呀?你说的这功能C++和汇编都能实现。

c++:

typedef  int(WINAPI *PFN)(HWND,LPCTSTR,LPCTSTR,UINT);

HMODULE handle=LoadLibraryW(L"user32.dll");
PFN msgA=(PFN)GetProcAddress(handle,"MessageBoxExA");

        if (!msgA)
        {
                return false;
        }
        msgA(hwnd,"提示信息","窗口标题",NULL);
return true;
2015-3-10 14:42
0
雪    币: 10
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
   50                        push    eax
   68 6E650000               push    656E
   68 696E6C69               push    696C6E69
   8BC4                      mov     eax, esp
   6A 00                     push    0
   6A 00                     push    0
   50                          push    eax
   50                          push    eax
   6A 00                     push    0
   B8 5C08D577         mov     eax, user32.MessageBoxExA
   FFD0                      call       eax
   83C4 08                add      esp, 8
   58                          pop      eax

最终是想在win7下写成call MessageBoxExA的地址(每次都在变),写成机器码的形式,最终是一段shellcode的形式
2015-3-10 15:06
0
雪    币: 10
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
其实就是要实现在win7下的弹出会话框的shellcode
2015-3-10 19:50
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
你需要动态获取user32的基址 然后再获得MessageBoxA的地址 再call
2015-3-10 19:54
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
15
先push 到内存里, 用的时候在pop 出来就行呀。
2015-4-2 11:53
0
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
程序不是有输入表吗,利用输入表不是更简单直观。。。
2015-6-2 00:07
0
游客
登录 | 注册 方可回帖
返回
//