如何能阻止编译器通过寄存器传递参数
C/C++本地代码调试
如何能阻止编译器通过寄存器传递参数
qstesiro
2015-03-24, 18:37 下午
分析dump时需要分析参数,但是有些参数会通过寄存器传递,分析起来很不方便,请问编译器是否有选项或是参数,来阻止编译器通过寄存器传递参数,但是可以保持其它的优化正常进行,谢谢了
Re: 如何能阻止编译器通过寄存器传递参数
BianChengNan
2015-03-24, 19:57 下午
指定_cdecl这种调用约定应该就不通过寄存器了,不错this指针貌似还是通过ecx传递,坐等
Re: 如何能阻止编译器通过寄存器传递参数
格蠹老雷
2015-03-25, 03:06 上午
首先这是根据函数原型决定的,也就是由源代码里的写法决定的,不是编译器可以随便改变的。设想跨模块协作时,一个模块的编译选项变化了,参数传递方式就变化了,那么另一个模块就有麻烦了...
如果是x64, 编译器支持一个参数可以把寄存器传递的参数复制到栈上,是有利于调试的
Re: 如何能阻止编译器通过寄存器传递参数
qstesiro
2015-03-31, 17:13 下午
谢谢两位的回答,但是我发现,如果是一个跨模块的函数调用,所有的参数都是走栈的,所以不管模块自己的编译选项是否发生变化,是不会影响调用它或是被它调用的模块的,当然也可能是因为我观察的数据不够多没有遇到过跨模块调用但是不通过栈传递的情况;