tryte 2021-06-29 21:22 采纳率: 0%
浏览 19

att汇编,为什么调用printf函数后影响了多个寄存器?

在64的att汇编下调用printf函数会影响了多个寄存器的值,我看资料只有返回值会放到rax寄存器中,但是实际上rcx,rdx也受到了影响。我该如何确认调用c函数会影响到哪些寄存器?

  • 写回答

1条回答 默认 最新

  • 「已注销」 2023-03-16 09:52
    关注

    参考GPT和自己的思路:

    首先,需要注意的是,调用C语言函数时,传参和返回值的方式是由操作系统约定的,不同的操作系统可能有不同的约定。因此,关于影响哪些寄存器的问题,具体取决于你使用的操作系统和编译器。

    一般来说,在64位的Linux系统中,第一个整型参数会被通过rdi寄存器传递,第二个整型参数会被通过rsi寄存器传递。而printf函数的第一个参数是一个格式化字符串,通常使用的是rodata段中的一个字符串常量,因此不会改变寄存器的值。而后面的参数(例如待输出的变量)会被传递到对应的寄存器中,也就是说,如果你调用printf函数时传递了一个整型变量,它会被传递到rdi或rsi寄存器中。

    至于为什么看起来还有其他寄存器的值也被影响了,这可能是由于编译器优化或者函数内部实现的细节导致的。为了确切地判断哪些寄存器被影响了,可以查看编译器生成的汇编代码,或者使用调试工具进行跟踪和分析。

    评论

报告相同问题?

悬赏问题

  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥15 Oracle触发器记录修改前后的字段值
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题