This question already has answers here:
Why does this memory address %fs:0x28 ( fs[0x28] ) have a random value?

(3个答案)


2年前关闭。




紧接在执行该指令之前,fs包含0x0。

我也想知道如何从GDB的此存储区中读取数据,该命令将是什么?

最佳答案

在现代操作系统(如Linux和Windows)中,fsgs寄存器指向线程特定的和其他OS定义的结构。修改段寄存器是 protected 指令,因此只有操作系统才能为您设置这些内容。

这个问题应该有助于解释确切的指向:amd64 fs/gs registers in linux
fs寄存器的实际值不是地址。它是一个选择器-GDT的偏移量,它描述了该段可以/不能使用的段。您看不到隐藏的fs基本和极限寄存器的值是什么-它们是内部CPU寄存器,仅通过向fs写入新的“选择器”来更新(此时,基本/极限寄存器已从GDT更新)。

关于linux - “mov rax, QWORD PTR fs:0x28”汇编指令有什么作用? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14414763/

10-15 07:45