首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >64位程序- Windows“阴影空间”问题

64位程序- Windows“阴影空间”问题
EN

Stack Overflow用户
提问于 2013-04-12 13:14:35
回答 1查看 887关注 0票数 2

我正在尝试用x64汇编语言创建一个程序,但在理解x64调用约定时遇到了问题。我认为问题在于我不知道我必须为调用CopyFile函数保留多少阴影空间。当我运行程序时,它就崩溃了。我使用MASM创建了这个程序。请帮我修复这个代码。谢谢。

代码语言:javascript
复制
includelib \Masm64\Lib\Kernel32.lib
includelib \Masm64\Lib\User32.lib
extrn GetProcessHeap : proc
extrn MessageBoxA : proc
extrn HeapAlloc : proc
extrn GetModuleFileNameA : proc
extrn ExitProcess : proc
extrn CopyFileA : proc

dseg segment para 'DATA'
file db 'C:\CopyThisFile.txt', 0
file2 db 'C:\ThisFileWasCopied.txt', 0
succ db 'Success!', 0
capt db 'Debug', 0
dseg ends

cseg segment para 'CODE'
start proc
sub rsp, 28h
xor r8, r8
mov rdx, qword ptr file2
mov rcx, qword ptr file
call CopyFileA
xor ecx, ecx 
call ExitProcess
start endp
cseg ends
end
EN

回答 1

Stack Overflow用户

发布于 2013-06-26 20:36:35

这与堆栈上的空间预留无关。

相反,您的错误在于错误地获取了字符串的地址。mov获取内容(前8个字节),而不是指向字符串的指针,因此引发AccessViolation异常。要解决此问题,请使用lea

代码语言:javascript
复制
format PE64 GUI 5.0
entry start

include 'WIN64A.INC'

section '.data' data readable writeable

    fileStr db 'C:\\CopyThisFile.txt', 0
    file2Str db 'C:\\ThisFileWasCopied.txt', 0
    succ db 'Success!', 0

section '.text' code readable executable

    start:

    sub rsp, 28
    xor r8, r8
    lea rdx, qword ptr file2Str
    lea rcx, qword ptr fileStr
    call [CopyFileA]
    xor ecx, ecx
    call [ExitProcess]

section '.idata' import data readable

    library kernel32,'kernel32.dll',user32,'user32.dll'

    import kernel32, \
        GetProcessHeap,'GetProcessHeap', \
        HeapAlloc,'HeapAlloc', \
        GetModuleFileNameA,'GetModuleFileNameA', \
        ExitProcess,'ExitProcess', \
        CopyFileA,'CopyFileA'

    import user32, \
        MessageBoxA,'MessageBoxA'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15963572

复制
相关文章

相似问题

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