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
Assembly mov[ebx+;0x18]ecx做什么?_Assembly_X86 - Fatal编程技术网

Assembly mov[ebx+;0x18]ecx做什么?

Assembly mov[ebx+;0x18]ecx做什么?,assembly,x86,Assembly,X86,这个指令是做什么的? 我不明白[ebx+0x18]在做什么?因为ebx不是地址,而是寄存器,所以请帮助我^^我假设指令是mov[ebx+0x18],ecx 这是Intel语法,其中方括号表示内部的值被取消引用,就像它是指针一样。在这种情况下,将恒定偏移量0x18添加到存储在ebx寄存器中的值,然后将其解释为随后被解引用的内存地址 因此,指令将存储在ecx中的值复制到ebx+0x18指向的内存中 请注意,ebx和ecx寄存器的实际内容不仅在地址ebx+0x18处的内存中修改,mov指令如下: mo

这个指令是做什么的?
我不明白[ebx+0x18]在做什么?因为ebx不是地址,而是寄存器,所以请帮助我^^

我假设指令是
mov[ebx+0x18],ecx

这是Intel语法,其中方括号表示内部的值被取消引用,就像它是指针一样。在这种情况下,将恒定偏移量
0x18
添加到存储在
ebx
寄存器中的值,然后将其解释为随后被解引用的内存地址

因此,指令将存储在
ecx
中的值复制到
ebx+0x18
指向的内存中


请注意,
ebx
ecx
寄存器的实际内容不仅在地址
ebx+0x18
处的内存中修改,
mov
指令如下:

mov <destination>, <source>
操作数周围的括号表示使用解引用,即查看特定寄存器中的地址,并将其用作源或目标。要将EBX指向的内存中的位置设置为ECX的值,请执行以下操作:

mov [ebx], ecx
mov [ebx + 0x18], ecx
最后,在解引用时,可以做一些基本的算术运算。因此,要将位置
0x18
(或24)字节从EBX指向的位置向前设置为ECX的值:

mov [ebx], ecx
mov [ebx + 0x18], ecx

EBX可以包含一个地址…它是在增加EBX中的地址吗?它正在访问由
EBX
持有的内存地址,偏移量是
24
。偏移量是字节吗?@assemblerMan没有位寻址,地址是字节,偏移量也是字节。0x18偏移量是字节还是位?@assemblerMan也没有。0x18只是一个偏移量,所以它只是一个数字,当添加到地址时,会生成一个地址。如前所述,
X+O
产生由X和O之和给出的地址(例如0x100+0x18=0x118)。现在,x86体系结构中的地址代表什么?一位、一个字节、一个单词?@assemblerMan正如玛格丽特所解释的,它实际上只是在添加数字。在这种情况下,我认为可以肯定地说地址指的是字节位置,因此字节偏移量比EBX指向的位置提前24字节。还有一个问题,libc-2.11.2.so或libc.so.6有什么区别?它们中的哪一个在内存映射段中链接?@assemblerMan这是一个非常不相关的问题……很抱歉,我不能帮你,因为我不知道:)