我是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,当我检查生成的文件时,我得到的是这样的东西:
我迷路了,因为我似乎没有找到有关x86编码的任何信息,因此将不胜感激。
答案 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文本。
但是,如果您使用文本编辑器查看相同的内容,那么; 要么 因此,您的数据已正确写入文件,但是查看数据的方法与预期结果不兼容。我相信有些Linux应用程序可以显示字节/字/双字或qword甚至结构的数组,有些类似于 hexedit