Я изучаю курс компьютерной безопасности и пытаюсь понять, как выглядит стек, прежде чем дойти до строки комментария. Но malloc
меня портит. Я понимаю, как это должно выглядеть без malloc
. Я имею в виду, если бы у нас было только char buff[SIZE];
, за которым следует bool flag = false
, тогда scanf
, но я не могу сказать, как это выглядит здесь.
Код:
#define SIZE 11
int main() {
char* buff = malloc(SIZE * sizeof(char));
bool* flag = malloc(sizeof(bool));
*flag = false;
scanf("%s", buff);
// random code ...
return 0;
}
Это было бы без mallo c:
| Low Addrs |
+--------------+
| |
|--------------|
| flag | <- 1 byte
|--------------|
| buff | <- 11 bytes
|--------------|
| frame ptr | <- 4 bytes
|--------------|
| return addr | <- 4 bytes
+--------------+
| High Addrs |
А с malloc
я предполагаю что-то вроде этого?
| Low Addrs |
+---------------------+
| |
|---------------------|
| buff | <- 11 bytes
|---------------------|
| flag | <- 1 byte
|---------------------|
| addr flag malloc | <- 4 bytes
|---------------------|
| addr buff malloc | <- 4 bytes
|---------------------|
| frame ptr | <- 4 bytes
|---------------------|
| return addr | <- 4 bytes
+---------------------+
| High Addrs |
Однако я не очень уверен, что это правильно. Я имею в виду, я знаю, что malloc
использует кучу и увеличивает указатель разрыва программы для выделения данных, так что, может быть, правильным способом было бы, чтобы 11 байтов и 1 байт, добавленные сверху, не были? а вместо этого фактические данные были бы в куче ??? malloc
просто сбил меня с толку: /
Примечание: предположим, что нет технологии ASLR.