首页
社区
课程
招聘
[求助]汇编里如何对局部变量进行字符串赋值
2013-3-29 22:11 9608

[求助]汇编里如何对局部变量进行字符串赋值

2013-3-29 22:11
9608
如下面的代码:

_WinProc proc
                local @szText

                ;在这里如何将字符串"user32.dll"赋给@szText啊?
_WinProc endp

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

收藏
点赞0
打赏
分享
最新回复 (14)
雪    币: 53
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
PornU 2013-3-30 20:44
2
0
局部变量的作用域是单个子程序,在进入子程序的时候,通过修改栈指针esp来预留出需要的空间,在用ret指令返回主程序之前,同样通过恢复esp丢弃这些空间,这些变量就随之无效了.
显然,局部变量是无法在定义的时候指定初始化值的,对局部变量的初始化一般在子程序中同指令完成.

定义格式:
local   变量名1[[重复次数]] [:类型], 变量名2[[重复次数]] [:类型]…
local伪指令必须紧接在子程序定义的伪指令proc后,其他指令开始前.
例:
Local    loc1[1024]: Byte       ;1024长的字节数组
Local    loc2                   ;默认为dword类型的局部变量
Local    loc3:WNDCLASS          ;一个结构体类型
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xinhly 2013-3-31 18:36
3
0
这些我知道,我想知道的是具体的实例是怎么写的
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
hrpirip 1 2013-4-1 13:04
4
0
写个数组吧,字符串一般都是静态的常量。
雪    币: 55
活跃值: (519)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
hrpirip 1 2013-4-1 13:08
5
0
mov eax,addr szText
mov byte ptr [eax],'u'的编码
inc eax
mov byte ptr [eax],'s'的编码。
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
誓言剑 2013-4-3 05:22
6
0
invoke RtlMoveMemory,offset szText,addr @szBuf,sizeof szText
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xinhly 2013-4-3 07:34
7
0
[QUOTE=hrpirip;1160378]mov eax,addr szText
mov byte ptr [eax],'u'的编码
inc eax
mov byte ptr [eax],'s'的编码。[/QUOTE]

这个也知道,可是字符串要在子程序里定义,如何定义szText呢?好像要报错啊...
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xinhly 2013-4-3 07:35
8
0
我想知道的是如何把字符串放进szText里面,譬如'user32.dll'这个字符串
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
誓言剑 2013-4-3 08:16
9
0
.const
szText db "user32.dll",0
.code
Test proc
local @szBuf[64]
invoke RtlMoveMemory,addr szText,addr @szBuf,sizeof szText
ret
Test endp
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xinhly 2013-4-3 21:08
10
0
[QUOTE=誓言剑;1161054].const
szText db "user32.dll",0
.code
Test proc
local @szBuf[64]
invoke RtlMoveMemory,addr szText,addr @szBuf,sizeof szText
ret
Test endp...[/QUOTE]

这样我知道,我指的是将字符串放在子程序里,这样就可以只用几个简单的参数就能完成一个独立的功能,如果字符串放在外面的话,那对子程序就有了限制
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
誓言剑 2013-4-4 10:22
11
0
.code
Test proc
local @szBuf[64]
.const
szText db "user32.dll",0
.code
invoke RtlMoveMemory,addr szText,addr @szBuf,sizeof szText
ret
Test endp
雪    币: 184
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xinhly 2013-4-4 18:43
12
0
[QUOTE=誓言剑;1161493].code
Test proc
local @szBuf[64]
.const
szText db "user32.dll",0
.code
invoke RtlMoveMemory,addr szText,addr @szBuf,sizeof szText
ret
Test end...[/QUOTE]

在子程序里用数据段会不会出问题啊?还有就是如果外面已经定义了这个段怎么办啊?还有就是善后工作,需要清理内存什么的吗?
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
誓言剑 2013-4-5 04:13
13
0
回去好好看书,搞懂基本概念再来写程序,好吗?
Google就在那,不想看书就去自己找
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
richbyronk 2015-4-26 21:08
14
0
编译器没有提供这样的功能,5L的方案是正解,可以解决楼主的问题
另外"user32.dll"占10个字节,所以应该是local szText[10]:byte
雪    币: 9
活跃值: (1002)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
小西瓜皮 2015-6-30 00:50
15
0
myproc proc
jmp bbb
aaa:
db "kernel32.dll",0
bbb:
invoke messagebox,0,addr aaa,0,0
ret

myproc endp
游客
登录 | 注册 方可回帖
返回