linux - 在 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 编码的信息,所以任何帮助都将不胜感激。
解决方案
考虑一下具有此内容的文件,假设在 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
推荐阅读
- vba - 访问模块中的事件命令按钮事件处理程序
- c++ - 改善 OCR 结果
- c++ - 是否有像 ADTF2 那样的结构化属性?
- ios - 使用相同的请求标识符同时注册 2 个本地通知不被覆盖
- javascript - 无法在 Dialogflow 中存储下一轮对话的变量列表
- ios - tableView reloadData 不起作用,委托方法
- python - Pandoc 转换字典
- jena - 从 Jena 编写嵌入 JSON-LD
- google-apps-script - Google Scripts HtmlService 返回未定义的表单数据
- gnuplot - Gnuplot 和数据差距