按功能设置的寄存器

逆向工程 视窗 调试 反调试
2021-07-03 02:45:25

如何确定函数调用修改了哪些通用寄存器。我正在编写一个调用 IsDebuggerPresent() 的 Win32 汇编程序。根据 MSDN,如果存在调试器,它将返回一个非零的布尔值。我如何找出哪个寄存器被修改而不必组装和链接程序来测试它。

1个回答

通常,这个概念被称为寄存器保留寄存器易失性

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

根据绝大多数编译器遵循的英特尔 ABI EAXEDX、 和ECX可在过程或函数中免费使用,无需保留。

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