首页
社区
课程
招聘
那个ebp是什么来的
发表于: 2009-11-27 17:56 4132

那个ebp是什么来的

2009-11-27 17:56
4132
请问如下例子的那个ebp-4和var为什么有关系,EBP是什么来的
volatile void main
int var=1;
printf("var=%d\n",var);
__asm
{

mov dword ptr [ebp-4],10h //我知道是把10h即16传过去
}
int ret=var;
printf("var=%d\n",ret);

引用楼下:
如果改天一个变量对应着EBP - 8,LZ是不是也要问为什么呢?
楼下有怪莫怪,我是新手,我想知道EBP代表着什么

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这就是高级语言和汇编代码的对应关系
问为什么觉得没必要,变量总得占空间存储吧,既然占了空间就应该有地址有大小吧
如果改天一个变量对应着EBP - 8,LZ是不是也要问为什么呢?
2009-11-27 18:17
0
雪    币: 85
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我想知道EBP代表着什么
2009-11-27 18:36
0
雪    币: 50
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
#include"stdio.h"
void main()
{
int var=1;
printf("var=%d\n",var);
__asm
{
        mov dword ptr [ebp-4],14h //我知道是把10h即16传过去
}
int ret=var;
printf("var=%d\n",ret);
}


1:    #include"stdio.h"
2:    void main()
3:    {
00401010   push        ebp
00401011   mov         ebp,esp
00401013   sub         esp,48h
00401016   push        ebx
00401017   push        esi
00401018   push        edi
00401019   lea         edi,[ebp-48h]
0040101C   mov         ecx,12h
00401021   mov         eax,0CCCCCCCCh
00401026   rep stos    dword ptr [edi]
4:
5:
6:    int var=1;
00401028   mov         dword ptr [ebp-4],1
7:    printf("var=%d\n",var);
0040102F   mov         eax,dword ptr [ebp-4]
00401032   push        eax
00401033   push        offset string "var=%d\n" (0042201c)
00401038   call        printf (00401090)
0040103D   add         esp,8
8:    __asm
9:    {
10:
11:       mov dword ptr [ebp-4],14h //我知道是把10h即16传过去
00401040   mov         dword ptr [ebp-4],14h
12:   }
13:   int ret=var;
00401047   mov         ecx,dword ptr [ebp-4]
0040104A   mov         dword ptr [ebp-8],ecx


懂了吧
2009-11-27 18:39
0
雪    币: 290
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
ebp就是一个寄存器
一般利用ebp代替ESP来存取堆栈,mov dword ptr [ebp-4],10h ,也就是将10h 放到局部变量[ebp-4]中。
2009-11-27 18:41
0
雪    币: 85
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
哦谢谢楼上两位达哥的帮忙
2009-11-27 19:49
0
雪    币: 85
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=泥芭;7184871:    #include"stdio.h"
2:    void main()
3:    {
00401010   push        ebp
00401011   mov         ebp,esp
00401013   sub         esp,48h
00401016   push        ebx
00401017   push        esi
00401018   push        edi
00401019   lea         edi,[ebp-48h]
0040101C   mov         ecx,12h
00401021   mov         eax,0CCCCCCCCh
00401026   rep stos    dword ptr [edi]
4:
5:
6:    int var=1;
00401028   mov         dword ptr [ebp-4],1
7:    printf("var=%d\n",var);
0040102F   mov         eax,dword ptr [ebp-4]
00401032   push        eax
00401033   push        offset string "var=%d\n" (0042201c)
00401038   call        printf (00401090)
0040103D   add         esp,8
8:    __asm
9:    {
10:
11:       mov dword ptr [ebp-4],14h //我知道是把10h即16传过去
00401040   mov         dword ptr [ebp-4],14h
12:   }
13:   int ret=var;
00401047   mov         ecx,dword ptr [ebp-4]
0040104A   mov         dword ptr [ebp-8],ecx...[/QUOTE]

这个是什么分析软件分析的呀?
2009-11-27 21:14
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
8
vc本身看反汇编~
2009-11-28 00:18
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
学习了。   长知识了。
2009-11-28 12:25
0
游客
登录 | 注册 方可回帖
返回
//