基本上我试图做的是制作一个文件的副本 - 实际上,它还有很多,但我无法克服这个第一个障碍 - 在x86_64 Linux上使用YASM程序集。我的问题是我似乎无法多次使用fopen。
到目前为止我的代码:
segment .data
RW dd "w+", 0 ; RW -- read write (creates)
RO dd "r" , 0 ; RO -- read only
po dq 0 ; po -- pointer original
pn dq 0 ; pn -- pointer new
segment .text
global border
extern fopen
extern fclose
extern fputc
border:
push rbp
mov rbp, rsp
mov r8, rdi ; r8 -- the original file name
mov r9, rsi ; r9 -- the destination file
mov rdi, r8
lea rsi, [RO]
call fopen
mov [po], rax
mov rdi, r9
lea rsi, [RW]
call fopen
mov [pn], rax
mov rdi, "B" ; Just a test to know if worked.
mov rsi, [pn]
call fputc
EXIT:
mov rdi, [po]
call fclose
mov rdi, [pn]
call fclose
mov rsp, rbp
pop rbp
ret
它来自以下C程序:
char* source = "TestNorm.txt";
char* dest = "TestDest.txt";
border(source, dest);
我已尝试了一些事情,但最终归结为第二次fopen无法正常工作 - 文件未打开,当我尝试使用文件指针时,我显然遇到了一个段错误 - - 但第一个完美无缺。
我完全被这个人难住了。任何帮助将不胜感激。