写入程序集文件描述符中的文件有问题

时间:2014-11-17 02:33:47

标签: assembly

我正在编写一个程序,将内容从一个文件写入另一个文件。 我现在正在做的(测试)是打开这两个文件并在其中一个文件中写一个字符串。该程序不会显示任何错误,但文件中没有任何内容。

这是我的代码

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

我认为打开文件后存储文件描述符可能有问题,因为如果我在打开源文件后立即移动写入文件的代码块就可以了。

感谢您的帮助!

1 个答案:

答案 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愉快地将文件描述符放在你告诉它的位置,并且只是覆盖了它们后面的内容,因为它们不够大。