如何确定函数调用修改了哪些通用寄存器。我正在编写一个调用 IsDebuggerPresent() 的 Win32 汇编程序。根据 MSDN,如果存在调试器,它将返回一个非零的布尔值。我如何找出哪个寄存器被修改而不必组装和链接程序来测试它。
按功能设置的寄存器
逆向工程
视窗
调试
反调试
2021-07-03 02:45:25
1个回答
通常,这个概念被称为寄存器保留或寄存器易失性。
来自http://en.wikipedia.org/wiki/X86_calling_conventions#Register_preservation --
根据绝大多数编译器遵循的英特尔 ABI
EAX,EDX、 和ECX可在过程或函数中免费使用,无需保留。
换句话说,API函数,如IsDebuggerPresent()可能会修改EAX,EDX和/或ECX,但它不会改变EBX,ESP或EBP。
其它你可能感兴趣的问题