首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在汇编语言中使用Windows注册表函数

在汇编语言中使用Windows注册表函数
EN

Stack Overflow用户
提问于 2013-06-24 14:22:35
回答 2查看 1.1K关注 0票数 0

我正在尝试使用Windows注册表函数在汇编语言的'Software\Microsoft\Windows\CurrentVersion\Run‘注册表项中创建注册表项。我的程序崩溃并显示一条Windows错误消息。代码如下:

代码语言:javascript
复制
includelib \Masm64\Lib\Kernel32.lib
includelib \Masm64\Lib\Advapi32.lib
extrn ExitProcess : proc
extrn RegCreateKeyExA : proc

dseg segment para 'DATA'
rhdl dd 0
sbky db 'Software\Microsoft\Windows\CurrentVersion\Run\startupprogram.exe', 0
dseg ends

cseg segment para 'CODE'
start proc                   ;Use link.exe to define entry point
sub rsp, 28h

push 0
push qword ptr [rhdl]
push 0
push 0
push 0
xor r9d, r9d
xor r8d, r8d
lea rdx, [sbky]
mov rcx, 8000001h
call RegCreateKeyExA

xor ecx, ecx        ; exit code = 0
call ExitProcess
start endp
cseg ends
end

我将非常感谢你的帮助。也许我忽略了Windows调用约定?

EN

回答 2

Stack Overflow用户

发布于 2013-06-24 14:46:14

在Win64 x64调用约定中,您必须为在寄存器中传递的四个参数保留堆栈槽:

来自http://msdn.microsoft.com/en-us/library/ms235286.aspx

调用方负责为被调用方分配参数空间,并且必须始终为4个注册参数分配足够的空间,即使被调用方没有那么多参数也是如此。

因此,RegCreateKeyExA()函数将您推入堆栈的最后四个内容视为为四个寄存器参数保留的位置,然后尝试从第一个push 0中获取其他参数,然后获取堆栈中使用sub rsp,28h保留的区域中的任何随机垃圾。

尝试:

代码语言:javascript
复制
push 0
push qword ptr [rhdl]
push 0
push 0
push 0
sub rsp, 20h   ; reserve slots for arguments passed in regs
xor r9d, r9d
xor r8d, r8d
lea rdx, [sbky]
mov rcx, 8000001h
call RegCreateKeyExA
票数 2
EN

Stack Overflow用户

发布于 2013-06-24 17:05:34

这不是我做过的事情,但是我有一个非MASM的例子

SYS "SetWindowPos",@hwnd%,0,xpos%,ypos%,0,0,5

变成了

代码语言:javascript
复制
 push 5
 push 0
 push 0
 push ypos%
 push xpos%
 push 0
 push @hwnd%
 call "SetWindowPos" 

有一个编译器的汇编顺序,它在程序中搜索内部调用,然后查找外部调用(即windows调用)。

这一切都归结为您的编译器如何操作这些东西

从更简单的调用开始可能更容易进行实验

代码语言:javascript
复制
    push 16d
    call "MessageBeep"

代码语言:javascript
复制
    push 8d
    call "MessageBeep"

例如

两声嘟嘟声

代码语言:javascript
复制
    push 8
    call "MessageBeep"

    mov eax,1

    .ag
    inc eax
    cmp eax,&FFFFFFF
    jb ag


    push 16
    call "MessageBeep"

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17269131

复制
相关文章

相似问题

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