当缓冲区溢出时,sys_read将“溢出”字符

时间:2013-04-18 20:50:27

标签: linux assembly x86 nasm system-calls

使用NASM for Linux x86

mov ecx,eax
mov edx,ebx
mov eax,3
mov ebx,0
int 80h
ret

EAX最初具有mov'd db常量,EBX具有缓冲区的长度

这是我用来从控制台读取的代码。除了一个问题之外它工作正常...我要求2个字符,如果我超过2个字符并按回车键,下次我要求输入时,那些“溢出”/额外字符将被立即送入该请求,没有用户交互。如果我再次没有要求输入,那么这些额外的字符将被shell解释为一个命令。

示例:

对此读取例程的2个后续调用将产生:

2345

第二个输入请求不会阻止或提示用户输入任何内容,它只需要任何字符即可。在这两种情况下,我都在一个填充零的3字节缓冲区上要求完全两个字符。

1调用阅读程序:

2345
$> 45: command not found

有关如何解决此问题的任何想法?我应该使用不同的系统调用吗?

1 个答案:

答案 0 :(得分:1)

读取输入后,需要刷新缓冲区以避免多余的数据传递到下一个输入读取。但这不是缓冲区溢出。

我问了同样的问题,但对于x86-64 Linux,所以它并不完全重复: How to avoid stdin input that does not fit in buffer be sent to the shell in Linux 64-bit Intel (x86-64) assembly

无论如何,遵循GunnerInc的优秀教程(适用于x86 Linux)应该可以解决您的问题: http://www.dreamincode.net/forums/topic/286248-nasm-linux-terminal-inputoutput-wint-80h/