我想用两个整数从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字符串,最后给出了一个分段错误。
有线索吗?

最佳答案

您没有正确调整堆栈指针。
在你的原始代码中,你推了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

关于c - 从汇编中调用C printf,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22658083/

10-12 01:29