gpt4 book ai didi

从程序集调用 C printf

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:29 26 4
gpt4 key购买 nike

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

最佳答案

您没有正确调整堆栈指针。

在您的原始代码中,您插入了 12 个字节,但只“弹出”了 8 个字节。

在您更新的代码中,您将 8 个字节压入两次,即总共 16 个字节,但仅“弹出”8 个字节一次。


至于打印值的顺序;在您的原始代码中:

push dword [ob]  
push dword [eb]
push LC0

您已将 LC0 声明为 db "odd bits: %d, even bits: %d", 10, 0,很明显您想要 ob 先打印出来。参数是从右到左推送的,因此您应该在 ob 之前推送 eb

关于从程序集调用 C printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22658083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com