Как выглядит стек с mallo c? - PullRequest
0 голосов
/ 06 мая 2020

Я изучаю курс компьютерной безопасности и пытаюсь понять, как выглядит стек, прежде чем дойти до строки комментария. Но 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.

...