首页
社区
课程
招聘
[求助]关于使用winasm调用Getusername
发表于: 2007-7-6 00:39 5348

[求助]关于使用winasm调用Getusername

2007-7-6 00:39
5348
前面省略
.data?
szUsername        db 256 dup(?)
.code
        start:
        invoke        GetUserName,addr szUsername,esp
        end start

总是无法正常调用
变成
        start:
        mov eax,sizeof szUsername
        push        eax
        invoke        GetUserName,addr szUsername,esp
        pop                eax
        end start
就可以了。
兄弟我十分不理解,为什么多压了一个参数就可以了呢?最后还是要pop回来保证栈平衡。
难道最后那个参数应该是 64 bit的?
望大哥们指教

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

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
invoke  GetUserName,addr szUsername,esp

这个是个函数调用啊,他的返回值是在EAX里 前面PUSH EAX和后面的POP EAX之是保存和恢复
2007-7-6 10:32
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
GetUserName的第二个参数是第一个参数缓冲区的大小,你为什么要使用esp寄存作为函数的第二个参数???
2007-7-6 11:10
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
4

.486                       ; create 32 bit code
.model flat, stdcall       ; 32 bit memory model
option casemap :none       ; case sensitive

include \masm32\include\windows.inc
include \masm32\include\advapi32.inc
include \masm32\include\user32.inc

includelib \masm32\lib\advapi32.lib
includelib \masm32\lib\user32.lib
   
.data?
	szUsername  db 256 dup(?)
	dwLen		dd ?
.code
start:
	mov eax,sizeof szUsername
	mov dwLen, eax
	invoke  GetUserName,addr szUsername,addr dwLen
	invoke MessageBox,NULL,addr szUsername,addr szUsername,MB_OK
	ret

end start

2007-7-6 12:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
--  --如果是单纯的返回值,我的第一段程序应该可以吧?毕竟没有对eax的任何操作。
2007-7-6 14:37
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
--。。--
为了保险起见,我当时不清楚是不是我的变量设置的有问题,用esp会比较安全一点。
2007-7-6 14:42
0
雪    币: 247
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
esp怎么会安全 那么多寄存器, 你就挑了一个不能用的
2007-7-7 13:44
0
雪    币: 198
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
8
thanks Aker
2007-7-8 02:39
0
游客
登录 | 注册 方可回帖
返回
//