如何确定函数调用修改了哪些通用寄存器。我正在编写一个调用 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
。
其它你可能感兴趣的问题