c - 如何用汇编程序将二进制数据写入文件?

标签 c inline-assembly

我尝试通过 sys_write 系统调用(到标准输出或文件)进行二进制写入,但我只能有文本文件。如何也有无文本(二进制)字节?

"mov   %eax,    %ebx;" 
"mov   $4, %eax;" 
"mov   -0x40(%rbp),       %ecx;" 
"mov   $14,      %edx;" 
"int   $0x80;"

尝试使用此示例,如果它们不是文本字节,则无法写入 14 个字节(非文本字节的文件长度为 0!)。

最佳答案

我不确定你的问题是什么。只要您在 %edx 中传递正确的长度,sys_write 就会将缓冲区中的任何值写入 %ebx 中的文件描述符。这包括 0 到 255 范围内的任何值(即完整字节范围)。

也许您也应该发布用于打开文件的代码。但即使您以文本模式打开文件,向其中写入仍然可以使用任何值。

更多的想法可以看看:你刷新输出了吗?你关闭文件吗?如果不这样做,那么该字符串可能仍卡在缓冲区中等待刷新。

关于c - 如何用汇编程序将二进制数据写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2005004/

相关文章:

c - BCC 中的内联汇编(Bruce 的 C 编译器)- 如何使用 C 变量?

c - C 函数流程图

python - 使用 (n)curses 打印到终端的右侧或底部

c - 如何检查 256i(16 位) vector 以了解它是否包含大于零的元素?

c++ - 汇编语言扫描长字符串以计算元音的数量

c++ - 在 .intel_syntax GNU C 内联汇编中引用内存操作数

C++在函数模板中传递函数指针

c - 与输入相对质数的随机数

C - 奇怪的语法错误

c - Sleep() 内联汇编调用可以工作,但会生成运行时检查失败