在x86中写入文件时的编码问题

时间:2020-03-12 05:25:01

标签: linux assembly x86-64 nasm

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

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

** (encoder:3785): WARNING **: 07:56:10.576: Invalid channel positions.

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

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

section .bss
     data resb 4

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

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

在这种情况下,数据的值为0x10,当我检查生成的文件时,我得到的是这样的东西:

enter image description here

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

1 个答案:

答案 0 :(得分:1)

暂时考虑一下具有此内容的文件,以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文本。

enter image description here

但是,如果您使用文本编辑器查看相同的内容,那么; enter image description here 要么 enter image description here 因此,您的数据已正确写入文件,但是查看数据的方法与预期结果不兼容。我相信有些Linux应用程序可以显示字节/字/双字或qword甚至结构的数组,有些类似于 hexedit