【发布时间】:2013-04-04 12:30:25
【问题描述】:
我正在尝试用 x64 汇编语言创建一个程序,但我在理解 x64 调用约定时遇到了问题。我认为问题在于我不知道必须为调用 CopyFile 函数保留多少影子空间。当我运行程序时,它就会崩溃。我使用 MASM 创建了这个程序。请帮我修复此代码。谢谢。
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
【问题讨论】:
-
为什么不编写和编译一个简单的 C 程序,看看它做了什么?
-
我对 C 了解不多,但我了解第三代语言。这是因为我想先了解低级语言,然后再逐步学习高级语言。
-
mov rdx, qword ptr file2用file2的内容加载rdx。我想你想要offset那里。与rcx相同。 -
谢谢,但我也很好奇通话后 RSP 是什么。当调用者负责清理堆栈时,这意味着什么?
-
不再需要纯汇编开发人员了。你真的应该花点时间学习一些 C 语言。这将有助于你的汇编程序以及在你脑海中的一些 C 框架。
标签: windows assembly stack x86-64 shadow