首页 > 解决方案 > 在 x86 中写入文件时出现编码问题

问题描述

我是 x86 的新手,目前正在编写一个程序,在对从文件中读取的数据进行一些操作后,我需要编写一个文件,但是当我将结果写入文件时遇到问题,因为它正在写入一些奇怪的结局。

在这里,我保留了存储结果和输出文件所需的空间:

section .data
     new_file db "new_file.txt", 0 

section .bss
     data resb 4

将数据写入名为new_file.txt的文件的代码:

mov rax, SYS_OPEN
mov rdi, new_file
mov rsi, O_CREAT + O_WRONLY
mov rdx, 0644o
syscall

push rax
mov rdi, rax
mov rax, SYS_WRITE
mov rsi, data
mov rdx, 4
syscall

mov rax, SYS_CLOSE
pop rdi
syscall

例如,假设我想做一些加法,然后将结果存储在data中以便稍后写入:

mov rax, 0xF
add rax, 0x1
mov [data], rax

在这种情况下,数据的值为 0x10,当我检查生成的文件时,我得到如下信息:

在此处输入图像描述

我迷路了,因为我似乎没有找到任何关于 x86 编码的信息,所以任何帮助都将不胜感激。

标签: linuxassemblyx86-64nasm

解决方案


考虑一下具有此内容的文件,假设在 hexedit 中查看。

ADDR  00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F
------------------------------------------------------
 00   0A 20 20 20 20 20 20 20  20 20 20 F0 9D 90 98 F0
 10   9F 84 09 09 10 00 00 00  03 7C 2D 1A 0A 0A 0A 0A

使用CAT转储到控制台会尝试显示它认为是 UTF-8 文本的内容。

在此处输入图像描述

但是,如果您使用文本编辑器查看相同的内容; 在此处输入图像描述在此处输入图像描述 因此您的数据已正确写入文件,但您要查看它的方式与您期望的结果不兼容。我相信有适用于 Linux 的应用程序,可以显示字节/单词/dwords 或 qwords 甚至结构的数组,有点类似于hexedit


推荐阅读