如何计算堆栈段(SS)内的值
逆向工程
部件
x64dbg
堆
2021-07-01 11:02:37
1个回答
寄存器ss, cs, ds, es, gs,fs是特殊的。它们被称为段寄存器,包含的不是地址而是选择器。
CPU 使用选择器作为对段的引用 - 具有特定基址(起始地址)、限制(结束地址)和权限的内存区域。
选择器和段由操作系统设置,理论上可能有许多不同的段,但实际上所有现代操作系统都使用平面内存段(32 位进程为 0 到 0xFFFFFFFF)作为标准代码和数据段(ss, cs, ds)1 . 这意味着在表达式中ss:[ebp+8],只有 的值EBP用于计算地址。在你的情况下确实是正确的
EBP + 8 = 006FFB50 + 8 = 006FFB58
与括号中显示的值匹配。
但是,=调试器中符号后面的值不是计算结果,而是内存中该地址处的值。如果您打开内存转储并转到地址 006FFB58,您应该会看到006FFC98那里。
调试器提示中的括号表示内存取消引用,类似于程序集语法。
1 gs并被fs区别对待,通常用于线程本地存储 (TLS) 块,该块对于每个线程都不同,并且不从 0 开始,因此例如 fs:0 不会映射到 RAM 地址 0。
其它你可能感兴趣的问题
