纠正我对基本分配内存的理解
逆向工程
部件
linux
x64
2021-06-12 19:02:45
1个回答
如果我理解正确:
在这个缓冲区中创建了一个大小为 256 字节的缓冲区(malloc),前 32 位设置为 0(因为 dword 指定 32 位大小)接下来的 32 位(32 到 63)设置为 C8h,接下来的 32 位(64到 95) 到 0。
是的!
这个新指针的地址写入第 127 位之间的第一个缓冲区
那么它将是第 128 位。qword atrax+0x10是第一个malloc.
但这些并不是严格的位偏移。您可以从内存开始计算多少位,但我会质疑为什么这很重要。
PS:附加问题:为什么'rax+1'要理解为'rax+8bits'而不是rax+1bit?
rax 是一个 64 位寄存器,因此您可以使用它来表示 2^64 个值。
如果rax是0x12345678并且我添加了1,会发生什么?0x12345679无论您想要表示多少位,它都会变成。(过度简化,但我希望这能说明问题)。
例如: mov dword ptr [rax+4], 0xC8
参考:https : //www.felixcloutier.com/x86/MOV.html
从上面的参考,这是一个mov m32, imm32意思是通过这个指针将一个 32 位常量复制到 32 位 DWORD 中 [rax+4]
所以因为[rax+4]代表一个指向字节可寻址内存的指针,所以+4代表4个字节。
这只是因为m32操作数 tomov与字节地址有关。还有其他 x86 指令可以操作位,但不是这个。
其它你可能感兴趣的问题
