首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegOpenKeyEx返回MASM64中的错误87

RegOpenKeyEx返回MASM64中的错误87
EN

Stack Overflow用户
提问于 2016-11-06 12:47:09
回答 1查看 220关注 0票数 0

我正在用MASM64编写小应用程序(ML64.exe)。其中一个函数是在注册表中设置值。我从打开钥匙开始,但是有一个错误。

函数RegOpenKeyEx返回错误87,GetLastError返回0x36B7。

我的代码:

代码语言:javascript
复制
extrn ExitProcess : proc
extrn MessageBoxA : proc
extrn RegOpenKeyExA : proc
extrn RegSetValueExA : proc
extrn RegCloseKey : proc
extrn GetLastError : proc

.const
HKEY_CURRENT_USER equ 80000001h
KEY_SET_VALUE equ 2
KEY_CREATE_SUB_KEY equ 4
KEY_WOW64_64KEY equ 0100h
KEY_WRITE equ 00020006h
REG_SZ equ 00000001h

.data
hReg dq 0
szRegKeyName db "Software\Microsoft\Windows\CurrentVersion\Run",0

.code

    Main proc
        sub rsp, 30h
        lea rax, hReg
        push rax
        mov r9, KEY_SET_VALUE+KEY_CREATE_SUB_KEY+KEY_WOW64_64KEY
        mov r8, 0
        lea rdx, szRegKeyName
        mov rcx, HKEY_CURRENT_USER
        call RegOpenKeyExA ;returns 87
        call GetLastError ;returns 0x36B7
        add rsp, 30h

        xor rcx, rcx
        call ExitProcess
    Main endp
end

请帮帮我。提前谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-06 13:18:24

使用堆栈操作不正确。你的主要错误- push rax,你真的在这里设置不是第5个参数,而是什么都没有.第5次参数为堆栈中的随机值.正确设置第5参数- mov [rsp+20h],rax .还可以查看更多关于堆栈对齐的内容,并且GetLastError在这里不相关- Reg*函数返回错误代码yorself,但没有设置lasterror。不对hReg使用全局变量,而是将其分配到堆栈中。例子可以是这样的:

代码语言:javascript
复制
extrn ExitProcess : proc
extrn MessageBoxA : proc
extrn RegOpenKeyExA : proc
extrn RegSetValueExA : proc
extrn RegCloseKey : proc

.const
HKEY_CURRENT_USER equ 80000001h
KEY_SET_VALUE equ 2
KEY_CREATE_SUB_KEY equ 4
KEY_WOW64_64KEY equ 0100h
KEY_WRITE equ 00020006h
REG_SZ equ 00000001h

.data
szRegKeyName db "Software\Microsoft\Windows\CurrentVersion\Run",0

.code

hReg equ 28h

    test proc
        sub rsp, 38h
        lea rax,[rsp+hReg]
        mov [rsp+20h],rax
        mov r9, KEY_SET_VALUE+KEY_CREATE_SUB_KEY+KEY_WOW64_64KEY
        mov r8, 0
        lea rdx, szRegKeyName
        mov rcx, HKEY_CURRENT_USER
        call RegOpenKeyExA
        test eax,eax
        jnz @@1
        mov rcx,[rsp+hReg]
        call RegCloseKey
@@1:
        add rsp, 38h
        ret
    test endp
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40449509

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档