首页
社区
课程
招聘
[求助]汇编问题
发表于: 2012-1-12 17:19 4271

[求助]汇编问题

2012-1-12 17:19
4271
将汇编译成机器码,用OD的Assemble函数.不知道怎么计算跳转指令的长度

_test_func:
push    ebp
mov     ebp,esp
sub     esp,0xC
mov     dword ptr [ebp-0x8],0x0
jmp     L4//2字节?3字节?。。。5字节?
L1: //这个标号的地址没法确定,因为jmp L4这条指令长度不确定
mov     ebx,dword ptr [ebp-0x8]
mov     dword ptr [ebp-0x4],ebx
L2://同L1
add     dword ptr [ebp-0x8],0x1
L4://同L1
mov     ebx,dword ptr [ebp-0x8]
cmp     ebx,0xA
setl    bl
cmp     bl,0x0
jnz     L1//同 jmp L4
L3:://同L1
mov     eax,0x0
mov     esp,ebp
pop     ebp
retn

现在只能把所有条件跳转都看作6字节,编译完了再回头修改.来来回来的要编译N遍。求一个好的算法,谢谢

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 78
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
[QUOTE=xiaoming;1037733]将汇编译成机器码,用OD的Assemble函数.不知道怎么计算跳转指令的长度

_test_func:
push    ebp
mov     ebp,esp
sub     esp,0xC
mov     dword ptr [ebp-0x8],0x0
jmp     L4//2字节...[/QUOTE]

你可以在跳转语句加上jmp short等修饰词试试
2012-1-16 14:33
0
雪    币: 175
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
跳转指令本身占一个字节,然后跳转到的目的地址与本条指令的下一条指令的地址之差占据剩余的字节。

如使用Windows系统的debug命令(开始---运行---debug)
-a100
0B4C:0100 jmp 102
0B4C:0102
-u100
0B4C:0100 EB00          JMP     0102;差为0
0B4C:0102 00FA          ADD     DL,BH

这个差可能占据一个字节、一个字或一个双字,所以跳转指令总长度可能是2、3、5个字节。

具体来说,楼主给出的代码中的跳转都是短距离的,所以都是2个字节。
2012-1-28 14:13
0
雪    币: 175
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
你也可以这样:
mov eax, 123
jmp eax
这样的话跳转语句恒为5字节!
2012-2-7 10:17
0
游客
登录 | 注册 方可回帖
返回
//