首页
社区
课程
招聘
再问基础问题 :(
发表于: 2005-11-19 22:57 4086

再问基础问题 :(

2005-11-19 22:57
4086
在反汇编的时候经常看到类似 lea     edi, [ebp+var_104]或者lea     edi, [ebp-100h]

ebp+var_xxxxx我去哪里找呢?我怎么知道它指向哪里呢?看起来像是指到一个buf,但是我怎么获得相关的信息呢,比如它到底有多大,它到底代表什么?

小d汇编基础太差了,不知道说清楚了没有?

谢谢大家指导

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

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 61782
活跃值: (21986)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
ebp+var_xxxxx指向哪里必须动态跟踪,其指向一个数据块,例如:

typedef struct __tagDATA{
        WORD        x1;
                ……;
        }DATA;
程序读写这个数据块时,可能会用ebp+var_xxxxx形式完成。

这个数据块多大,起始地址是什么,这些都得分析代码获得。
2005-11-20 09:17
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多谢kanxue老大。

我还是没完全搞明白  :<

类似ebp+var_xxxxx这种,是不是局部变量?通常可以找到初始化的地方,比如memset(ebp+var_xxxx,10,10),就可以判断出来它的大小?

那么ebp+100h,数字这种呢? 我该怎么样去具体分析呢,需要动态调试?那么仅从ida反汇编出来的结果是不够的?

我是新手,可能有些问题很不上路,大家见笑了。谢谢。
2005-11-20 10:39
0
雪    币: 236
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
个人认为,动态调试是最好的解决方案。静态调试一般是用来研究程序的算法。调试程序最好还是用动态的方式,那样比较容易跟踪其变量的变化,也比较的直观。
2005-11-20 13:13
0
雪    币: 61782
活跃值: (21986)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
5
最初由 cainiaojia 发布
多谢kanxue老大。

我还是没完全搞明白 :<

类似ebp+var_xxxxx这种,是不是局部变量?
........


局部变量是一个临时的缓冲区,用完释放,如下面这段代码:

00401000 >/$  6A 04         push    4                                ; /Arg2 = 00000004
00401002  |.  6A 03         push    3                                ; |Arg1 = 00000003
00401004  |.  E8 16000000   call    0040101F                         ; \Add.0040101F
00401009  |.  8BD8          mov     ebx, eax
0040100B  |.  6A 00         push    0                                ; /ExitCode = 0
0040100D  \.  FF15 00204000 call    [<&KERNEL32.ExitProcess>]        ; \ExitProcess

0040101F  /$  55            push    ebp                              ;  ;保护现场原先的EBP指针
00401020  |.  8BEC          mov     ebp, esp                         ;  ;设置新的EBP指针,指向栈顶
00401022  |.  83EC 04       sub     esp, 4                           ;  ;分配局部变量所有空间
00401025  |.  8B45 0C       mov     eax, [ebp+C]                     ;  ;调用参数2
00401028  |.  8B5D 08       mov     ebx, [ebp+8]                     ;  ;调用参数1
0040102B  |.  895D FC       mov     [ebp-4], ebx                     ;  ;参数1放局部变量里
0040102E  |.  0345 FC       add     eax, [ebp-4]                     ;  ;参数2与局部变量相加
00401031  |.  83C4 04       add     esp, 4                           ;  ;释放局部变量所有空间
00401034  |.  5D            pop     ebp                              ;  ;恢复现场的ebp指针
00401035  \.  C2 0800       retn    8

像ebp+var_xxxxx这种可以这样理解,程序开始可能调用VirtualAlloc等函数分配一空间,ebp指向这个缓冲区,然后程序用ebp+var_xxxxx指针来读写相应地址的数据。如何确定ebp+var_xxxxx所指的数据块大小,你得动态跟踪程序如何处理这块数据,从而确定这块数据大小和起始地址。
2005-11-21 11:03
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
基本上明白了

多谢kanxue大哥和其他兄弟的点拨

以后有不懂得再来麻烦大家。
2005-11-21 13:07
0
游客
登录 | 注册 方可回帖
返回