如何确定通过函数调用修改了哪些通用寄存器。我正在编写一个Win32 Assembly程序,该程序调用IsDebuggerPresent()。根据MSDN,如果存在调试器,它将返回非零的布尔值。我如何找出要修改的寄存器,而无需汇编和链接程序进行测试。

#1 楼

通常,此概念称为寄存器保存或寄存器波动。

来自http://en.wikipedia.org/wiki/X86_calling_conventions#Register_preservation-


根据绝大多数编译器所遵循的Intel ABI的要求,EAXEDXECX可在
过程或函数中免费使用,并且无需保留。


换句话说,诸如IsDebuggerPresent()之类的API函数可能会修改EAXEDX和/或ECX,但不会修改EBXESPEBP