相关疑难解决方法(0)

如何在Linux AMD64中使用fs/gs寄存器?

在x86-64架构中,两个寄存器具有特殊用途:FS和GS.在linux 2.6.*中,FS寄存器似乎用于存储线程本地信息.

  • 那是对的吗?
  • 什么存储在fs:0?是否有描述此内容的C结构?
  • 那么GS的用途是什么?

architecture linux x86 assembly x86-64

35
推荐指数
3
解决办法
1万
查看次数

为什么这个内存地址%fs:0x28(fs [0x28])有一个随机值?

我写了一段C代码,我已经拆解了它,并阅读了寄存器以了解程序在汇编中的工作原理.

int test(char *this){
    char sum_buf[6];
    strncpy(sum_buf,this,32);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我一直在研究的代码是测试功能.当我反汇编输出我的测试功能时,我得到...

   0x00000000004005c0 <+12>:        mov    %fs:0x28,%rax
=> 0x00000000004005c9 <+21>:        mov    %rax,-0x8(%rbp)
... stuff ..
   0x00000000004005f0 <+60>:        xor    %fs:0x28,%rdx
   0x00000000004005f9 <+69>:        je     0x400600 <test+76>
   0x00000000004005fb <+71>:        callq  0x4004a0 <__stack_chk_fail@plt>
   0x0000000000400600 <+76>:        leaveq 
   0x0000000000400601 <+77>:        retq 
Run Code Online (Sandbox Code Playgroud)

我想知道的mov %fs:0x28,%rax是真正在做什么?

c gcc x86-64 buffer-overflow disassembly

25
推荐指数
1
解决办法
1万
查看次数

标签 统计

x86-64 ×2

architecture ×1

assembly ×1

buffer-overflow ×1

c ×1

disassembly ×1

gcc ×1

linux ×1

x86 ×1