我试着用
mov rdx, 4
push rdx
mov rsi, temp_str
push rsi
mov rdi, temp_str1
push rdi
call memmove
和
sub rsp, 24
mov [rsp + 16], rdx
mov [rsp + 8], rsi
mov [rsp], rdi
call memmove
add rsp, 24
和其他种类的魔法,但没有任何效果。哪个咒语可以完成这项工作?
(temp_str 和 temp_str1 定义为
temp_str db "abc", 0
temp_str1 db "def", 0
, memmove 来自 msvcrt)
编辑:
sub rsp, 32
mov rcx, temp_str1
mov rdx, temp_str
mov r8, 4
call memmove
也崩溃了。
编辑2:完整代码:
format PE64 console
entry prog
include "win64ax.inc"
section '.idata' import data readable writeable
library kernel32, 'kernel32.dll', msvcrt, 'msvcrt.dll'
import kernel32, ExitProcess,'ExitProcess'
import msvcrt, memmove, 'memmove'
section '.text' code readable executable
prog:
;;mov rdx, 4
;;push rdx
;;mov rsi, temp_str
;;push rsi
;;mov rdi, temp_str1
;;push rdi
;;call memmove
;;sub rsp, 24
;;mov [rsp + 16], rdx
;;mov [rsp + 8], rsi
;;mov [rsp], rdi
;;call memmove
;;add rsp, 24
;;push rbp
;;mov rbp, rsp
;;push rdx
;;push rsi
;;push rdi
;;call memmove
;;mov rsp, rbp
;;pop rbp
sub rsp, 32
mov rcx, temp_str1
mov rdx, temp_str
mov r8, 3
call memmove ; crash
add rsp, 32
end_prog:
invoke ExitProcess, 0
section '.data' data readable writeable
temp_str db "abc", 0
temp_str1 db "def", 0