我想用C调用两个整数的printf函数。 我的格式字符串是:
LC0:
db "odd bits: %d, even bits: %d", 10, 0
我有整数ob和eb:
ob: DD 0
eb: DD 0
然后我最后做了:
push dword [ob]
push dword [eb]
push LC0
call printf
add esp,8
然而,这给了我结果Odd bits: [ob], Even bits: [ob, repeated]
然后给我一个分段错误。
我是否将printf
函数称为错误?
编辑:
我将LC1
添加为db "even bits: %d", 10 0
,然后重新添加:
push dword [ob]
push LC0
call printf
push dword [eb]
push LC1
call printf
add esp, 8
这给了我一个REVERSED结果,给eb到LC0字符串,ob给LC1字符串,并且它在结尾处给出了分段错误。 任何线索?
答案 0 :(得分:2)
您没有正确调整堆栈指针。
在您的原始代码中,您推送的是12个字节,但只有"弹出" 8。
在您更新的代码中,您需要两次按8个字节,即总共16个字节,但只有"弹出"一次8个字节。
关于打印值的顺序;在您的原始代码中:
push dword [ob]
push dword [eb]
push LC0
您已将LC0
声明为db "odd bits: %d, even bits: %d", 10, 0
,所以很明显您打算先ob
打印。参数从右向左推,因此您应该在eb
之前推送ob
。