Bit*_*ani 1 linux x86 assembly printf
所以我很困惑.我正在阅读"从头开始编程"一书,并正在使用库.
printf工作得很好,只要我在字符串中包含一个"\n",但如果没有它,它将完全没有打印.
知道为什么会这样吗?
码:
.section .data
my_str:
.ascii "Jimmy Joe is %d years old!\n\0"
my_num:
.long 76
.section .text
.globl _start
_start:
pushl my_num
pushl $my_str
call printf
movl $1, %eax
movl $0, %ebx
int $0x80
此外,当我使用-m elf_i386进行32位模式和-dynamic-linker /lib/ld-linux.so.2 -lc进行链接时,我收到警告
ld:在搜索-lc时跳过不兼容的/usr/lib64/libc.so
如果这有任何区别,或者如果有人对如何直接加载32位库有任何建议.
谢谢!
问题是printf默认情况下只是将东西打印到stdout缓冲区.在刷新缓冲区之前,实际上不会打印任何内容.这取决于stdout的缓冲模式,但是,默认情况下,它是行缓冲的,这意味着每次打印换行符时都会刷新它.
要在C中明确刷新,请调用fflush; 你可以用asm代码做到这一点
pushl stdout
call fflush
addl $4, %esp
Run Code Online (Sandbox Code Playgroud)
或者,您可以调用stdlib exit函数(在实际退出之前刷新所有I/O缓冲区),而不是使用_exit系统调用.
| 归档时间: |
|
| 查看次数: |
1904 次 |
| 最近记录: |