Я пытаюсь поместить head-тег и foot-тег в struct malloc_chunk, вот так:
struct malloc_shunk {
INTERNAL_SIZE prev_size;
INTERNAL_SIZE size;
}
Вот что я сделал:
1
struct malloc_shunk {
INTERNAL_SIZE foot_tag;
INTERNAL_SIZE prev_size;
INTERNAL_SIZE size;
}
перед тем, как поместить head_tag в malloc_chunk, я просто добавил только foot_tag и скомпилировал glibc. Я сделал небольшую тестовую программу, которая выделяет 60 байт из системы, а затем освобождает ее. Я вижу, что malloc вернулся правильно, бесплатно пожаловался, сказав «неверный указатель». Возвращенный указатель malloc был 0x9313010. Это делает указатель на начало malloc_chunk равным 0x9313004.
Поэтому, когда free передается 0x9313010, он преобразует его в 0x9313004 через (mem2chunk) и проверяет его на выравнивание. Так как мой размер слова равен 4, проверка выравнивания с 0x9313010 - вот где у меня проблемы. Подскажите, пожалуйста, должен ли указатель Mem (возвращаемый malloc) быть выровнен по двойному слову. (поскольку здесь он может не удовлетворять этому критерию, поскольку различие между указателем, возвращаемым функцией malloc и началом фрагмента, будет здесь 12 байтов, а не 8).
Чтобы когда-либо появиться 1. проблема, я просто добавил 1 метку в структуру, чтобы она стала
struct malloc_shunk {
INTERNAL_SIZE foot_tag;
INTERNAL_SIZE prev_size;
INTERNAL_SIZE размер;
INTERNAL_SIZE head_tag;
}
Теперь разница между указателем, возвращаемым функцией malloc и началом фрагмента, будет 16, что всегда будет выровнено по двойному слову. Но здесь я сталкиваюсь с более серьезной проблемой, так как время, когда первый malloc называется ареной, настраивается, и бункеры инициализируются. Размер жертвы здесь не равен нулю, как это должно быть в обычных случаях. Проблема в том, что жертва-> размер на самом деле оказывается местом, где хранится «top», а не «last_remainder». Я хотел бы спросить ваше мнение, если есть какой-либо другой способ / обходной путь / решение, чтобы я мог преодолеть эту инициализацию проблемы арены, с которой я сейчас сталкиваюсь.
Спасибо и С уважением,
Капил