首页
社区
课程
招聘
ebp寄存器也能做他用?
发表于: 2010-8-21 13:18 4498

ebp寄存器也能做他用?

2010-8-21 13:18
4498
先看几句汇编:
00516908   .  89BE 54040000 mov     dword ptr [esi+454], edi
0051690E   .  89AE 58040000 mov     dword ptr [esi+458], ebp
00516914   .  EB 25         jmp     short 0052683B
edi,ebp中存放的是x,y坐标,希望改成自己的!
delphi中我这样写:
    Pushad
    mov     eax, dword ptr [$00B3B63A]//  esi地址
    mov     esi, eax
    mov     dword ptr [esi+$450], ecx
    mov     eax, x
    mov     edi, eax
    mov     dword ptr [esi+$454], edi
    mov     eax, y
    mov     ebp, eax                            //这句报错,游戏直接崩溃!
    mov     dword ptr [esi+$458], ebp  
    jmp     Address                             //地址
    popad

不明白,游戏中为什么ebp可以用,我却不能用?不是说这是栈底指针么?卡住了,问题很菜,有什么解决办法?谢谢!

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
前后pushad和popad保存过寄存器的值是没问题的,但是你那个jmp     Address出去后干什么了?还有再回来执行popad么?你确保堆栈平衡了么?Address处的内容有去访问栈上的变量么(访问栈上变量会通过ebp)?
2010-8-21 13:51
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
栈底指针是ESP,不是EBP
EBP是用来访问 SS段用来寻址的寄存器。
就是说,通过EBP来访问堆栈段的所有内容,
通过ESP只能访问栈顶内容。
通过EBP可以访问堆栈段内其他任何内容。
2010-8-21 19:53
0
雪    币: 459
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
堆栈平衡破坏了。jmp以后没有popad
2010-8-22 18:03
0
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看来是我找call找的有问题,不知道还有没有好的建议?准备结贴了~
2010-8-23 17:36
0
游客
登录 | 注册 方可回帖
返回
//