-
-
[求助]用JMP将CALL命令移动另一段执行后的返回问题?程序不能正常运行,是怎么回事呢?
-
发表于:
2007-11-1 10:57
4044
-
[求助]用JMP将CALL命令移动另一段执行后的返回问题?程序不能正常运行,是怎么回事呢?
有一个程序,结构如下:
序号 段名 文件中偏移 文件中大小
0001 CODE 00000400 00095400
0002 DATA 00095800 00002A00
0003 .idata 00098200 00003000
.....
在CODE段中有一句代码:
0049509F: E8 28FFFFFF CALL 00494FCC
需要移动到CODE段空白处再跳回来,但CODE段的空处大小不够,仅几个字节。因此只好JMP到DATA段的空白处再跳回CODE段。
原代码如下:
《CODE段处要移的代码是下面第一句:--》
0049509F: E8 28FFFFFF CALL 00494FCC
004950A4: 83C0 44 ADD EAX, 44
《DATA段的空白处:--》
00498063: 0000 ADD [BYTE DS:EAX], AL
00498065: 0000 ADD [BYTE DS:EAX], AL
修改的结果如下:
《CODE段处要移的代码修改为:--》
0049509F: E9 BF2F0000 JMP 00498063
004950A4: 83C0 44 ADD EAX, 44
《DATA段的空白处代码修改为:--》
00498063: E8 64CFFFFF CALL 00494FCC
00498068: E9 37D0FFFF JMP 004950A4
可是为什么会运行不正常呢?
1、是不是JMP不能跨段运行呢?
2、是不是CALL命令跨段运行不能正常返回?
求高手指导和解答:
1、上面2个问题的疑问?
2、增加CODE段大小的具体方法。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!