Skip to content

Heap Memory

original source https://heap-exploitation.dhavalkapil.com

Apa itu?

Heap memory dapat dialokasikan secara dinamis. Sehingga program dapat meminta dan melepaskan dari segmen memori kapanpun. Memori heap bersifat global, yang artinya memori dapat diakses dan dimodifikasi dari manapun dalam program. Penggunaan heap memori menggunakan pointer

C
#include <stdio.h>
#include <stdlib.h>

int main () {
   char *str;

   /* Initial memory allocation */
   str = (char *) malloc(15);
   strcpy(str, "some text");
   printf("String = %s,  Address = %u\n", str, str);

   free(str);

   return(0);
}
Malloc ( malloc(size_t n) )

Mengembalikan pointer ke chunk yang baru dialokasikan minimal n byte, atau null jika tidak ada ruang yang tersedia. Selain itu, pada kegagalan, errno diatur ke ENOMEM pada sistem ANSI C.

Jika n adalah nol, malloc mengembalikan chunk berukuran minimum. (Ukuran minimum adalah 16 byte pada sebagian besar sistem 32bit, dan 24 atau 32 byte pada sistem 64bit.) Pada sebagian besar sistem, size_t adalah tipe yang tidak ditandatangani, jadi panggilan dengan argumen negatif ditafsirkan sebagai permintaan ruang dalam jumlah besar, yang akan sering gagal. Nilai maksimum yang didukung dari n berbeda di seluruh sistem, tetapi dalam semua kasus kurang dari nilai maksimum yang dapat diwakili dari size_t.

Free ( free(void* p) )

Melepaskan chunk memori yang ditunjuk oleh p, yang sebelumnya telah dialokasikan menggunakan malloc atau rutin terkait seperti realloc. Ini tidak berpengaruh jika p adalah nol. Ini dapat memiliki efek arbitrer (yaitu, buruk!) jika p telah dibebaskan. Kecuali dinonaktifkan (menggunakan mallopt), mengosongkan ruang yang sangat besar bila memungkinkan, akan secara otomatis memicu operasi yang mengembalikan memori yang tidak digunakan ke sistem, sehingga mengurangi jejak program