1

printf在汇编中使用时遇到问题。这是一段代码

push $buff
push $end_str
call printf
add $8, %esp

是一个像这样声明的o_buff变量:.lcomm o_buff, 32并且end_strend_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 语法

4

0 回答 0