首页
社区
课程
招聘
jmp跟popad的疑问
发表于: 2010-9-18 07:07 4944

jmp跟popad的疑问

2010-9-18 07:07
4944
首先感谢论坛朋友的帮助,俺也会基本的call了,也会在call之后jmp回原始地址了:)
现在还有个问题,jmp回原地址后,好像执行到最后堆栈不平衡了,
下面是我在vc里call自己函数的代码(vc不用pushad/popad好像也可以正常跳回去)
s是我一个char*指针,赋值给ecx后,我就jmp出去到father_address+8的位置,没问题!
如果jmp在ren8之前,那这个子函数不是不会自动平衡堆栈了?(retn8没机会执行)
        __asm {

                mov                ecx, dword ptr[s];
                mov                ebx,dword ptr[father_address];
                add                ebx,8;

                jmp                ebx;

                retn 8;
        }
再问下,jmp那里能不能先申请个局部变量,比如[esp-4],然后把father_address+8赋值给[esp-4]再jmp?

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 64
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
如果jmp在ren8之前,那这个子函数不是不会自动平衡堆栈了?

先问一下,你是怎么call这段代码?
这里这有jmp,jmp不影响到堆栈吧
最好有汇编后的代码,就一目了然了
2010-9-18 08:49
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你在原来的程序中修改为call XXXX,那么你的函数就用ret返回。
你如果在原来的程序修改为jmp xxxx,那么你的函数只能再jmp xxxx跳回原来的下一条指令。
当然,你非要在原来的程序call xxxx,然后函数中又jmp xxx跳回去,也不是不可以,但要记得堆栈平衡的问题。所以,最好不要先call,然后又jmp返回,这样很混乱。
2010-9-18 08:54
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
再一个,你的VC中夹杂asm代码,尤其还涉及到堆栈,相对地址和绝对地址的问题,和C中间的指针又容易混淆,这样很不好弄,你这个程序改得太混乱了。
2010-9-18 08:56
0
雪    币: 197
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
jmp过去后返回时代码里手动平衡一下堆栈?
2010-9-18 09:37
0
雪    币: 175
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
你好,谢谢你昨天的帮忙,嘿嘿~
我是按照你昨天的答复改用call的,改call之后,因为覆盖了原始代码1个字节,所以顺便nop掉后2个字节,然后在call执行完后,也就是这个asm代码最后jmp回以前nop x 2后的下一个地址
但是jmp回去后,发现堆栈不平衡的,导致上一层的主函数在retn 8 后,返回到了另外一个地址:(
2010-9-18 10:01
0
雪    币: 175
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
你好,我是新手,请问jmp回上一层函数后,如何手动平衡堆栈呢?
2010-9-18 10:02
0
雪    币: 998
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
add esp, 4
2010-9-18 10:50
0
雪    币: 468
活跃值: (52)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
给我分啦。
你要堆栈平衡,空pop eax两次就可以了。
记得先保存eax的值,比如mov [某个地址你自己可用的],eax,然后pop eax,pop eax,然后
mov eax,[保存的地址],就可以了。
2010-9-18 13:07
0
雪    币: 175
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
好的,我试试!
2010-9-18 14:09
0
游客
登录 | 注册 方可回帖
返回
//