Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 查找ss引用的地址:[esp+;28]_Assembly_X86_Reverse Engineering_Addressing Mode_Memory Segmentation - Fatal编程技术网

Assembly 查找ss引用的地址:[esp+;28]

Assembly 查找ss引用的地址:[esp+;28],assembly,x86,reverse-engineering,addressing-mode,memory-segmentation,Assembly,X86,Reverse Engineering,Addressing Mode,Memory Segmentation,我需要在游戏中找到一个地址,但不确定如何处理分段偏移 在ollydbg中,它向我显示一个数据结构位于: ss:[esp+28] esp = 0019DF94 ss = 002B 那么这个结构的实际地址是什么呢? 是不是ss+esp+28?esp+28为您提供虚拟地址,您将在程序中使用该地址。在受保护模式(这是您在Windows中使用的)下,段寄存器是段选择器,是段的索引。如果需要数据的全局地址,则需要在GDT中查找SS的值,读取基址,然后将其添加到esp+28(请参阅)。在实模式下,段寄存器

我需要在游戏中找到一个地址,但不确定如何处理分段偏移

在ollydbg中,它向我显示一个数据结构位于:

ss:[esp+28]

esp = 0019DF94
ss = 002B
那么这个结构的实际地址是什么呢?
是不是
ss+esp+28

esp+28为您提供虚拟地址,您将在程序中使用该地址。在受保护模式(这是您在Windows中使用的)下,段寄存器是段选择器,是段的索引。如果需要数据的全局地址,则需要在GDT中查找SS的值,读取基址,然后将其添加到esp+28(请参阅)。在实模式下,段寄存器只需左移4,然后添加到您的地址(请参阅)。

否,绝对不是
+ss
。如果这是32位代码,则处于保护模式,因此SS是段选择器,而不是直接作为段基值。在Windows和其他使用扁平内存模型的普通操作系统上,SS基数始终为0。TL:DR:忽略SS,实际上没有使用分段。所以它只是esp+偏移量(28)?是的,非常简单。说明在32位/64位平面内存模式的操作系统(如Windows)下,分段可以忽略,因此这是一个很好的复制。不,如果要考虑分段,ESP+28将为您提供地址的偏移部分。段基(来自索引的GDT条目)给出了基+偏移量的基,这就是线性虚拟地址。您省略了通过页表将虚拟转换为物理的步骤。(“全局地址”没有任何标准含义,但如果您指的是物理地址,则您忘记了分页。分页在保护模式下是可选的,但在长/兼容模式下是必需的。但无论如何,Windows启用分页。)