我在MASM64(ML64.exe)中編寫小型應用程序。其中一個功能是在註冊表中設置值。我開始打開鑰匙,但有一個錯誤。RegOpenKeyEx在MASM64中返回錯誤87
函數RegOpenKeyEx返回錯誤87,並且GetLastError返回0x36B7。
我的代碼:
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
請幫助我。在此先感謝您的幫助。
您沒有正確使用x64 abi,您不能忽略陰影空間。先用C語言編寫這段代碼,然後看看編譯器生成的機器代碼。 –
另外,調用GetLastError是毫無意義的。返回值是錯誤代碼。閱讀文檔。 –
@HansPassant那麼如何解決這個問題呢?你知道什麼是錯的嗎? – Dave