我正在编写一个程序,将内容从一个文件写入另一个文件。 我现在正在做的(测试)是打开这两个文件并在其中一个文件中写一个字符串。该程序不会显示任何错误,但文件中没有任何内容。
这是我的代码
BITS 32
section .data
msg db "Hola"
section .bss
src_file resb 1 ; Source file descriptor
dest_file resb 1 ; Destination file descriptor
section .text
global _start
_start:
pop ebx ; argc
pop ebx ; argv[0] nombre del ejecutable
pop ebx ; src file name
;; Open src file
mov ecx,1 ; Write mode
mov eax,5 ; sys_open()
int 0x80 ; Interruption 80. kernel call
mov [src_file],eax
pop ebx ; dest file name
;; Open dest file
mov ecx,1 ; Write mode
mov eax,5 ; sys_open()
int 0x80 ; Interruption 80. kernel call
mov [dest_file],eax
;; Writes in src file
mov edx,4 ; Long
mov ecx,msg ; text
mov ebx,[src_file] ; File descriptor of dest file
mov eax,4
int 0x80
;; Closes src file
mov ebx,[src_file] ; File descriptor of src file
mov eax,6 ; sys_close()
int 0x80 ; Kernel call
;; Closes dest file
mov ebx,[dest_file] ; File descriptor of src file
mov eax,6 ; sys_close()
int 0x80 ; Kernel call
;; Exits the program
mov ebx,0 ; OS exit code
mov eax,1 ; sys_exit
int 0x80 ; Kernel call
我认为打开文件后存储文件描述符可能有问题,因为如果我在打开源文件后立即移动写入文件的代码块就可以了。
感谢您的帮助!
答案 0 :(得分:1)
src_file resb 1 ; Source file descriptor
dest_file resb 1 ; Destination file descriptor
文件描述符的1个字节不会删除它。它们需要是DWORD大小的变量!
src_file resd 1 ; Source file descriptor
dest_file resd 1 ; Destination file descriptor
为什么程序会显示错误?你从来没有告诉它!这是大会,没有什么是自动的。 CPU愉快地将文件描述符放在你告诉它的位置,并且只是覆盖了它们后面的内容,因为它们不够大。