GDB Hacks – i386参数入参顺序
在i386CPU中调用函数时,参数的传递顺序是什么?类似函数中括号内的参数一样,从左到右依次入栈还是从右到左入栈。将通过gdb的方式来观察参数的传递过程。
如下例子

使用编译命令编译
gcc -g func_param.c
使用gdb调试运行,观察参数入参顺序。
Tips
在使用gdb的break命令时,如果指定函数名的方式下断点
break main
程序会跳过基础的保存上一个栈ebp
开辟内存空间等指令的过程
也就是程序不会在首行就停下来,而是执行了部分指令后才会停下来。
在函数的入口位置停下来的方式
break *(main)
加上括号,方便后续指定位置断点使用。
加上了*之后,程序就能在程序入口位置停下来。
fun1 --两个参数
查看main函数的汇编代码,如下

调用fun1前,对应的栈数据

说明i386参数传递是通过栈的方式实现,如下,进入到fun1之后

本文探讨了在i386架构中,函数参数如何通过栈传递。通过GDB调试一个示例程序,展示了参数从右到左入栈的过程,并提供了一个简单的汇编代码分析。在调试过程中,利用GDB的断点功能观察到函数调用前后栈的变化,进一步证实了这一传递规则。同时提到了__attribute__((regparm(3)))属性,用于指定寄存器传递参数。
最低0.47元/天 解锁文章
187

被折叠的 条评论
为什么被折叠?



