首页
社区
课程
招聘
[求助]一个关于代码重定位简单小问题
发表于: 2013-11-3 11:29 5481

[求助]一个关于代码重定位简单小问题

2013-11-3 11:29
5481
最近在看xfish大大的Anti Virus专题】自己操作代码的时候遇到了一些错误,自己怎么也搞不定
.386
.model flat, stdcall
option casemap:none

.code
szText  db  'Virus Dels Demo', 0   
START:
    call  Dels2

Dels:
    int  3
    int  3

Dels2:
     pop  ebx
     lea  edx, [ebx +szText -Dels] ; edx = szText       
ret
end START

lea这行报错说不能用16位寄存器操作32位地址 
error A2155: cannot use 16-bit register with a 32-bit address
翻来覆去看不明白 各位大大指点下 如何修改这段小代码

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 9479
活跃值: (757)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
DWORD PTR
2013-11-3 11:49
0
雪    币: 505
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
好像还是报那个错误
2013-11-3 11:58
0
雪    币: 231
活跃值: (2631)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
使用寄存器传值
2013-11-3 12:51
0
雪    币: 505
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个可以有,不过 可以直接修改用上面那段操作执行吗,那个报错 我看不懂
2013-11-3 13:48
0
雪    币: 10915
活跃值: (2880)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
6
Dels2:
     pop  ebx;为什么pop,没看懂
     lea  edx, [ebx +szText -Dels] ; edx = szText      
ret
改为
Dels2:
     pop  ebx
lea eax,szText
mov ebx,Dels

     lea  edx, [ebx +eax -ebx] ; edx = szText      
ret
试试,其他的自己想办法。
2013-11-3 13:54
0
雪    币: 505
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
[QUOTE=joker陈;1236492]Dels2:
     pop  ebx;为什么pop,没看懂
     lea  edx, [ebx +szText -Dels] ; edx = szText      
ret
改为
Dels2:
     pop  ebx
lea eax,szText
mov ebx,Dels

  ...[/QUOTE]

pop ebx是用寄存器ebx存储之前call Dels2的下一条指令地址,整个代码是进行代码重定位,是为了在代码任何一个地址可以取到自己自定义的变量,如szText db '....',0
2013-11-3 18:34
0
雪    币: 505
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
无意中改成了这样  OD里调试了一下就对了
只修改这一句:lea  edx, [ebx]+[szText-Dels]

真奇怪 不知道咋搞的
2013-11-3 18:50
0
雪    币: 357
活跃值: (3378)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
9
call  @f
@@:
    pop ebp
    sub ebp,@b
    lea edx,[ebp + szText] ; edx = szText
    ret

一般是这么用
2013-11-4 03:21
0
雪    币: 10915
活跃值: (2880)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
10
呵呵,没怎么用汇编写代码。e8 00 00 00 00,哈哈,这个看的多。
2013-11-4 09:49
0
游客
登录 | 注册 方可回帖
返回
//