code: def initialize_gdt_x86(self,state,concrete_target):
          
          _l.debug("Creating fake Global Descriptor Table and synchronizing gs segment register")
          gs = self._read_gs_register_x86(concrete_target)
          gdt = self.generate_gdt(0x0, gs)
          self.setup_gdt(state, gdt)
  
          # Synchronize the address of vsyscall in simprocedures dictionary with the concrete value
          _vsyscall_address = concrete_target.read_memory(gs + 0x10, state.project.arch.bits / 8)
          _vsyscall_address = struct.unpack(state.project.arch.struct_fmt(), _vsyscall_address)[0]
          state.project.rehook_symbol(_vsyscall_address, '_vsyscall')
  
          return gdt
docs: Create a GDT in the state memory and populate the segment registers.
          Rehook the vsyscall address using the real value in the concrete process memory
  
          :param state:               state which will be modified
          :param concrete_target:     concrete target that will be used to read the fs register
          :return: