所以我弄乱了一个用 C++ 编写的有趣的 keygenme,它根据OSINFO结构的值派生出密钥。现在,在检查有效密钥时,它使用以下指令:
CMP EAX, DWORD PTR DS:[key]
我的问题是:为什么密钥不存储在局部变量或类似的东西中:[EBP-X]
?
我如何将它转换回 C++ 以便它将密钥存储在DS:[key]
而不是在堆栈中?
所以我弄乱了一个用 C++ 编写的有趣的 keygenme,它根据OSINFO结构的值派生出密钥。现在,在检查有效密钥时,它使用以下指令:
CMP EAX, DWORD PTR DS:[key]
我的问题是:为什么密钥不存储在局部变量或类似的东西中:[EBP-X]
?
我如何将它转换回 C++ 以便它将密钥存储在DS:[key]
而不是在堆栈中?
使用全局或静态变量。
解释:
EBP
(基指针)通常保存当前堆栈帧的地址,在这种情况下,它用于获取局部变量的地址。(参考) 全局或静态变量不需要这样的指针,因为它们的地址在程序加载时是固定的。
顺便说一句:我没有测试在 32 位编译器上编译一个简单的程序。64 位模式不使用段寄存器。