首页
社区
课程
招聘
[求助]关于内联汇编中的je怎么处理
发表于: 2009-6-26 17:42 6123

[求助]关于内联汇编中的je怎么处理

2009-6-26 17:42
6123
在看精华9中有这么一个帖子http://bbs.pediy.com/showthread.php?t=46163
标 题: 第三方二进制汇编代码在VC中的移植和应用
作 者: shangzh
时 间: 2007-06-11 16:29
链 接: http://bbs.pediy.com/showthread.php?t=46163
其中有介绍直接将算法的反汇编代码内联到keygen中成为一个函数直接调用,其中有这么一段
A.  代码的修正
拷贝出来的汇编代码需要进行初步处理才能移植到VC的函数中,上面的汇编代码中地址头需要全部删除掉(这个可以在UltraEdit的列模式中复制),对于代码中的常数全部要加上0x,因为Ollyice拷贝出来的都是16进制数,对应跳转指令可以用原来的标示符号,如jnz     short  100022F5,改成jnz     short  A100022F5,将地址前加上一个字符,否则VC对于这样的跳转会将数字理解成数字而认为是错误代码,而不会根据目标标签自动计算偏移量。

我分析一个软件的代码其中有这样一段
push   FF
call    dword ptr [674338]   
lea     eax, dword ptr [esi+8]
test    eax, eax
je      short 00511EE8
mov     dword ptr [eax+4], eax

我按文章中介绍的这样写
_asm
{

push    0xFF
call    dword ptr [0x674338]   
lea     eax, dword ptr [esi+8]
test    eax, eax
je      short  A00511EE8>>>>>>>>>>就是这儿通不过
mov     dword ptr [eax+4], eax
......
}
然后用VS2008编译结果却得到个error C2094: 标签“A00511EE8”未定义
哪位大神介绍一个内联汇编到底要注意些什么呢?

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 231
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
需要重定位。
2009-6-26 17:49
0
雪    币: 214
活跃值: (146)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不好意思说错了
同意楼上
2009-6-26 17:55
0
雪    币: 238
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
学习关注一下。
2009-6-26 17:55
0
雪    币: 130
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
其实看代码把这一行屏蔽了也无所谓,估计就是判断返回值的代码
我是看到这篇文件写的方法很方便,想试验一下
2009-6-26 18:03
0
雪    币: 44
活跃值: (24)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
如果跳转在自己的代码内部,用标签。

__asm
{
    MOV EAX,0
    //..Other codes
    Jnz Label1
    Mov dword ptr[ebx],ecx
Label1:                                  <-----会跳到这里
    Mov dword ptr[ebx],0
}

如果是外部地址,用变量。

DWORD Address = 0x123456;

__asm
{
    MOV EAX,0
    //..Other codes
    Jnz Address                 <-----生成的汇编是Jnz Dword Ptr[Address]
    Mov dword ptr[ebx],ecx
   Mov dword ptr[ebx],0
}

至于绝对跳转(就是直接生成Jnz 0x***的),还请各位大侠赐教。
另:
__asm __EMIT 0x?    可以生成机器码
2009-6-27 21:09
0
游客
登录 | 注册 方可回帖
返回
//