首页
社区
课程
招聘
[求助]为什么call会出现动态内存
发表于: 2016-4-28 00:43 3482

[求助]为什么call会出现动态内存

2016-4-28 00:43
3482
004E5796  |.  FF52 20       CALL DWORD PTR DS:[EDX+20]

如上,call后面怎么会有寄存器加偏移,本人小白,请大神指导

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 4668
活跃值: (1713)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
函数表
2016-4-28 02:46
0
雪    币: 19
活跃值: (1086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
应该是类成员函数
2016-4-28 03:22
0
雪    币: 191
活跃值: (848)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
4
比如说EDX是虚表指针,CALL DWORD PTR DS:[EDX+20]就会调用某个虚函数。
2016-4-28 08:36
0
雪    币: 76
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
还有就是call的地址是 模块地址+偏移
2016-4-28 22:03
0
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
00401016  /$  55            push ebp
00401017  |.  8BEC          mov ebp,esp
00401019  |.  51            push ecx
0040101A  |.  C745 FC 00104>mov [local.1],test1.00401000
00401021  |.  68 30804000   push test1.00408030                      ;  mark
00401026  |?  E8 E1000000   call test1.0040110C
0040102B  |.  83C4 04       add esp,4
0040102E  |?  6A 01         push 1
00401030  |?  6A 0B         push 0B
00401032  |?  FF55 FC       call [local.1]
00401035  |?  83C4 08       add esp,8
00401038  |?  50            push eax
00401039  |.  68 38804000   push test1.00408038                      ;  %d\n
0040103E  |?  E8 C9000000   call test1.0040110C
00401043  |?  83C4 08       add esp,8
00401046  |?  C745 FC 0B104>mov [local.1],test1.0040100B
0040104D  |?  6A 01         push 1
0040104F  |?  6A 0B         push 0B
00401051  |?  FF55 FC       call [local.1]
00401054  |?  83C4 08       add esp,8
00401057  |?  50            push eax
00401058  |.  68 3C804000   push test1.0040803C                      ;  %d\n
0040105D  |.  E8 AA000000   call test1.0040110C
00401062  |.  83C4 08       add esp,8
00401065  |.  68 40804000   push test1.00408040                      ;  pause
#include "stdio.h"
#include "windows.h"

int add(int a,int b)
{
    return a+b;
}
int sum(int a,int b)
{
    return a-b;
}
void main()
{
    int (*fpro)(int a,int b);
    fpro=add;
    printf("mark");
    printf("%d\n",fpro(11,1));
    fpro=sum;
    printf("%d\n",fpro(11,1));
    system("pause");
}

上代码中的函数FPRO的入口是改变的,不知道是不是你说的那种,对于以上代码,理论是编译好应该可以达到人所描述情况
2016-5-1 01:06
0
游客
登录 | 注册 方可回帖
返回
//