Exemple #1
0
EHFrameDesc::~EHFrameDesc() {
  if (m_buf == nullptr) return;

  for_each_fde([] (const FDE& fde) {
    __deregister_frame(fde.get());
  });
}
Exemple #2
0
EHFrameHandle EHFrameWriter::register_and_release() {
  auto& vec = *m_buf;
  auto const fde = m_fde;

  if (fde != kInvalidFDE) __register_frame(&vec[fde]);

  return std::shared_ptr<std::vector<uint8_t>>(
    m_buf.release(),
    [fde] (std::vector<uint8_t>* p) {
      SCOPE_EXIT { delete p; };
      if (fde != kInvalidFDE) __deregister_frame(&((*p)[fde]));
    }
Exemple #3
0
static const char *processFDE(const char *Entry, bool isDeregister) {
  const char *P = Entry;
  uint32_t Length = *((const uint32_t *)P);
  P += 4;
  uint32_t Offset = *((const uint32_t *)P);
  if (Offset != 0) {
    if (isDeregister)
      __deregister_frame(const_cast<char *>(Entry));
    else
      __register_frame(const_cast<char *>(Entry));
  }
  return P + Length;
}
Exemple #4
0
void
__libc_fini (void)
#endif
{
  /* Call destructor functions.  */
  run_hooks (__DTOR_LIST__);
#ifdef HAVE_DWARF2_UNWIND_INFO
# ifdef HAVE_DWARF2_UNWIND_INFO_STATIC
#  if defined CRT_GET_RFIB_TEXT || defined CRT_GET_RFIB_DATA
  __deregister_frame_info_bases (__EH_FRAME_BEGIN__);
#  else
  __deregister_frame_info (__EH_FRAME_BEGIN__);
#  endif
# else
  __deregister_frame (__EH_FRAME_BEGIN__);
# endif
#endif
}
/* static */
void XDataAllocator::Unregister(XDataAllocation * xdataInfo)
{
#ifdef _WIN32
    // Delete the table
    if (AutoSystemInfo::Data.IsWin8OrLater())
    {
        NtdllLibrary::Instance->DeleteGrowableFunctionTable(xdataInfo->functionTable);
    }
    else
    {
        BOOLEAN success = RtlDeleteFunctionTable(&xdataInfo->pdata);
        Assert(success);
    }

#else  // !_WIN32
    Assert(ReadHead(xdataInfo->address));  // should be non-empty .eh_frame
    __deregister_frame(xdataInfo->address);
#endif
}
Exemple #6
0
void deregister_unwind_region(std::vector<char>* p) {
  std::auto_ptr<std::vector<char> > del(p);
  __deregister_frame(&(*p)[0]);
}
Exemple #7
0
void RTDyldMemoryManager::deregisterEHFramesInProcess(uint8_t *Addr,
                                                      size_t Size) {
  __deregister_frame(Addr);
}
Exemple #8
0
extern void _force_link() {
    __register_frame(nullptr);
    __deregister_frame(nullptr);
}
Exemple #9
0
	void deregister_frame(void* frame_begin) {
		#if !defined(USE_KEYMGR_HACK)
		__deregister_frame(frame_begin);
		#endif
	}
void RTDyldMemoryManager::deregisterEHFrames(uint8_t *Addr,
                                           uint64_t LoadAddr,
                                           size_t Size) {
  __deregister_frame(Addr);
}