我printf
在汇编中使用时遇到问题。这是一段代码
push $buff
push $end_str
call printf
add $8, %esp
是一个像这样声明的o_buff
变量:.lcomm o_buff, 32
并且end_str
是end_str: .ascii "%c\n"
。其中o_buff
是表示 ascii 代码的字节,这是一个示例形式的 gdbx /4b 0x0804a028
示例:0x0804a028 <o_buff> 49 48 49 48
假设状态为1010
,但(
无论o_buff
变量内部是什么,我总是得到。printf
我在调用之前和弹出它们之后将寄存器保存在堆栈上。当我只移动一个字节时:movb (%eax,%esi,1), %dl
然后push %edx
(当然在我 xor edx 寄存器之前)我得到一个正确的输出,但这只是一个字符。有人能指出我犯错的地方吗?我正在使用 GAS AT&T 语法