ディレクトリ
御霊のハウス
聖霊の家はMaleficarumの技術です。この技術のコアは、目標位置のチャンクfastbin偽造し、指定されたチャンクに割り当てられたアドレスを達成するように、それを解放しています。
スピリット検出バイパスハウス
偽チャンク、解放fastbin構成も望ましい場合には、必要な試験の一部バイパスする必要がfastbin対応するリンクされたリストに入れることができます。
偽チャンク的ISMMAP
#if HAVE_MMAP
if (chunk_is_mmapped(p)) /* release mmapped memory. */
{ /* see if the dynamic brk/mmap threshold needs adjusting */
if (!mp_.no_dyn_threshold
&& p->size > mp_.mmap_threshold
&& p->size <= DEFAULT_MMAP_THRESHOLD_MAX)
{
mp_.mmap_threshold = chunksize (p);
mp_.trim_threshold = 2 * mp_.mmap_threshold;
}
munmap_chunk(p);
return;
}
#endi
あなたが見ることができる、MMAPのビットが0に設定する必要がある、またはこのチャンクアンマップ自由意志、コールmunmap_chunk()関数ではなく、fastbinを入力する目的。
偽チャンク的サイズ
if (*fb != NULL
&& __builtin_expect (fastbin_index(chunksize(*fb)) != idx, 0))
{
errstr = "invalid fastbin entry (free)";
goto errout;
}
偽のチャンクサイズはfastbinに対応するインデックスのサイズを満足する必要があるが、また、整列する必要があります。
FACKチャンク的次のチャンク
if (__builtin_expect (chunk_at_offset (p, size)->size <= 2 * SIZE_SZ, 0)
|| __builtin_expect (chunksize (chunk_at_offset (p, size))>= av->system_mem, 0))
{
#ifdef ATOMIC_FASTBINS
/* We might not have a lock at this point and concurrent modifications
of system_mem might have let to a false positive. Redo the test
after getting the lock. */
if (have_lock
|| ({ assert (locked == 0);
mutex_lock(&av->mutex);
locked = 1;
chunk_at_offset (p, size)->size <= 2 * SIZE_SZ
|| chunksize (chunk_at_offset (p, size)) >= av->system_mem;
}))
#endif
{
errstr = "free(): invalid next size (fast)";
goto errout;
}
#ifdef ATOMIC_FASTBINS
if (! have_lock)
{
(void)mutex_unlock(&av->mutex);
locked = 0;
}
#endif
}
&EMSP、バイパスへの決意が、我々は次のチャンクのサイズを作成する必要がある場合は2以上* size_szですが、また、AV-> system_memを超えることはできません。
偽のチャンクに対応するリストのヘッドfastbin
if (__builtin_expect (*fb == p, 0))
{
errstr = "double free or corruption (fasttop)";
goto errout;
}
&EMSPは、fastbinリストを、対応する偽チャンクは、二重フリーケースを構成していない、すなわち、偽チャンクの先頭ではありません。
アドレスのFACKチャンク
偽のチャンクアドレスはMALLOC_ALIGN_MASK、整列する必要があります