我想用两个整数从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这给了我一个相反的结果,给出了eb到LC0字符串,ob给了LC1字符串,最后给出了一个分段错误。有线索吗?
发布于 2014-03-26 10:32:11
您没有正确调整堆栈指针。
在您的原始代码中,您正在推送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。
https://stackoverflow.com/questions/22658083
复制相似问题