Мы имеем программу написанную на языке Си.
/*СТЕК - Объем памяти, задействованный под автоматические переменные, возрастает и уменьшается.
КУЧА (СВОБОДНОЕ ХРАНИЛИЩЕ)- динамически выделенная память*/
//ПРИМЕР - ГДЕ ЧТО НАХОДИТСЯ В ПАМЯТИ
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int static_store = 30;
const char * pcg = "Строковый литерал";
int main()
{
int auto_store = 40;
char auto_string[] = "Автоматический массив char";
int * pi;
char * pc1;
/*Строка кода выделяет в памяти пространство, достаточное для хранения запрошенного кол-ва элементов и затем присваивает
адрес этого блока указателю pi*/
pi = (int *) malloc(sizeof(int));
*pi = 35;
/*Строка кода выделяет в памяти пространство, достаточное для хранения запрошенного кол-ва элементов и затем присваивает
адрес этого блока указателю pc1*/
pc1 = (char *) malloc(strlen("Динамическа строка") +1);
strcpy(pc1, "Динамическая строка");
printf(" static_store: %d по адресу %p \n", static_store, &static_store);
printf(" auto_store: %d по адресу %p \n", auto_store, &auto_store);
printf(" *pi: %d по адресу %p \n", *pi, pi);
printf(" %s по адресу %p \n", pcg, pcg);
printf("%s по адресу %p \n", auto_string, auto_string);
printf(" %s по адресу %p \n", pc1, pc1);
printf(" %s по адресу %p \n", "Строка в кавычках", "Строка в кавычках");
free(pi); //free() восстанавливает память в пуле
free(pc1);
getchar();
getchar();
return 0;
}
----------------------------------------
//Вывод на экран
static_store: 30 по адресу 00407000
auto_store: 40 по адресу 0028ff04
*pi: 35 по адресу 00550dd8
Строковый литерал по адресу 00408024
Автоматический массив char по адресу 0028fee9
Динамическая строка по адресу 00550df8
Строка в кавычках по адресу 004080ba
Использую дизассемблер IDA pro 6.6 или другой версии получаем длинный машинный код из которого находим код нашей программы.
byte - 8 бит
dword - doubleword = 4 байта = 32 бита
.text:00401369 ; --------------- S U B R O U T I N E ---------------------------------------
.text:00401369
.text:00401369 ; Attributes: bp-based frame
.text:00401369
.text:00401369 sub_401369 proc near ; CODE XREF: sub_401000+F8 p
.text:00401369
.text:00401369 var_40 = dword ptr -40h ;Инициализация переменной var_40, byte - размер, ptr - указатель
.text:00401369 var_3C = dword ptr -3Ch ;Инициализация переменной var_3C, dword - размер, ptr - указатель
.text:00401369 var_38 = dword ptr -38h
.text:00401369 var_28 = dword ptr -28h
.text:00401369 var_23 = dword ptr -23h
.text:00401369 var_1F = dword ptr -1Fh
.text:00401369 var_1B = dword ptr -1Bh
.text:00401369 var_17 = dword ptr -17h
.text:00401369 var_13 = dword ptr -13h
.text:00401369 var_F = word ptr -0Fh
.text:00401369 var_D = byte ptr -0Dh
.text:00401369 var_C = dword ptr -0Ch
.text:00401369 var_8 = dword ptr -8
.text:00401369 var_4 = dword ptr -4
.text:00401369
.text:00401369 push ebp
.text:0040136A mov ebp, esp
.text:0040136C and esp, 0FFFFFFF0h
.text:0040136F sub esp, 40h ; void *
.text:00401372 call sub_401AB0 ;Вызов функции
.text:00401377 mov [esp+40h+var_C], 28h
.text:0040137F mov [esp+40h+var_28+1], 0EEF2E2C0h
.text:00401387 mov [esp+40h+var_23], 0E8F2E0ECh
.text:0040138F mov [esp+40h+var_1F], 0EAF1E5F7h
.text:00401397 mov [esp+40h+var_1B], 0EC20E9E8h
.text:0040139F mov [esp+40h+var_17], 0E8F1F1E0h
.text:004013A7 mov [esp+40h+var_13], 686320E2h
.text:004013AF mov [esp+40h+var_F], 7261h
.text:004013B6 mov [esp+40h+var_D], 0
.text:004013BB mov [esp+40h+var_40], 4
.text:004013C2 call malloc ;вызов функции malloc()
.text:004013C7 mov [esp+40h+var_4], eax
.text:004013CB mov eax, [esp+40h+var_4]
.text:004013CF mov dword ptr [eax], 23h
.text:004013D5 mov [esp+40h+var_40], 13h
.text:004013DC call malloc ;вызов функции malloc()
.text:004013E1 mov [esp+40h+var_8], eax
.text:004013E5 mov eax, [esp+40h+var_8]
.text:004013E9 mov dword ptr [eax], 0E0EDE8C4h
.text:004013EF mov dword ptr [eax+4], 0E5F7E8ECh
.text:004013F6 mov dword ptr [eax+8], 0FFE0EAF1h
.text:004013FD mov dword ptr [eax+0Ch], 0F0F2F120h
.text:00401404 mov dword ptr [eax+10h], 0E0EAEEh
.text:0040140B mov eax, dword_407000
.text:00401410 mov [esp+40h+var_38], offset dword_407000
.text:00401418 mov [esp+40h+var_3C], eax ;40h - функция записи в файл
.text:0040141C mov [esp+40h+var_40], offset unk_408038
.text:00401423 call sub_401340
.text:00401428 mov eax, [esp+40h+var_C]
.text:0040142C lea edx, [esp+40h+var_C]
.text:00401430 mov [esp+40h+var_38], edx
.text:00401434 mov [esp+40h+var_3C], eax
.text:00401438 mov [esp+40h+var_40], offset unk_40805C
.text:0040143F call sub_401340
.text:00401444 mov eax, [esp+40h+var_4]
.text:00401448 mov eax, [eax]
.text:0040144A mov edx, [esp+40h+var_4]
.text:0040144E mov [esp+40h+var_38], edx
.text:00401452 mov [esp+40h+var_3C], eax
.text:00401456 mov [esp+40h+var_40], offset unk_40807B
.text:0040145D call sub_401340
.text:00401462 mov edx, off_407004
.text:00401468 mov eax, off_407004
.text:0040146D mov [esp+40h+var_38], edx
.text:00401471 mov [esp+40h+var_3C], eax
.text:00401475 mov [esp+40h+var_40], offset unk_408094
.text:0040147C call sub_401340
.text:00401481 lea eax, [esp+40h+var_28+1]
.text:00401485 mov [esp+40h+var_38], eax
.text:00401489 lea eax, [esp+40h+var_28+1]
.text:0040148D mov [esp+40h+var_3C], eax
.text:00401491 mov [esp+40h+var_40], offset unk_4080A8
.text:00401498 call sub_401340
.text:0040149D mov eax, [esp+40h+var_8]
.text:004014A1 mov [esp+40h+var_38], eax
.text:004014A5 mov eax, [esp+40h+var_8]
.text:004014A9 mov [esp+40h+var_3C], eax
.text:004014AD mov [esp+40h+var_40], offset unk_408094
.text:004014B4 call sub_401340
.text:004014B9 mov [esp+40h+var_38], offset unk_4080BA
.text:004014C1 mov [esp+40h+var_3C], offset unk_4080BA
.text:004014C9 mov [esp+40h+var_40], offset unk_408094
.text:004014D0 call sub_401340
.text:004014D5 mov eax, [esp+40h+var_4]
.text:004014D9 mov [esp+40h+var_40], eax
.text:004014DC call free
.text:004014E1 mov eax, [esp+40h+var_8]
.text:004014E5 mov [esp+40h+var_40], eax
.text:004014E8 call free
.text:004014ED call getchar
.text:004014F2 call getchar
.text:004014F7 mov eax, 0
.text:004014FC leave
.text:004014FD retn
.text:004014FD sub_401369 endp
.text:004014FD
Комментариев нет:
Отправить комментарий