Частина 13 - Сегмент даних
Для повного змісту всіх уроків натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті. https://github.com/mytechnotalent/Reverse-Engineering-Tutorial
Сегмент даних виділяє пам'ять на стеку пам'яті, а не на стека, оскільки вони не є місцевими змінними, вони відомі протягом усієї бінарної системи.
Розміри даних такі:
1)байт - використовуємо позначення db, яке очевидно 1 байт або 8 бітів.
2)слово - використовуємо dw і воно має довжину 2 байти.
3)двосліво - використовуємо dd для призначення і вони мають довжину 4 байти.
4)квадросліво - використовуємо dq, яке має довжину 8 байтів.
5)xmm-слово - використовуємо xmmword, яке має довжину 16 байтів.
6)ymm-слово - використовуємо ymmword, яке має довжину 32 байти.
Є математичні регістри SSE, які окремі від процесора, які містять наступне:
1)real4 - це єдиний або те, що ви вважаєте за плаваючий точці числа, оскільки воно має довжину 4 байти.
2)real8 - це подвійний плаваючий точці числа, оскільки воно має довжину 8 байтів.
Нарешті, є масиви, які можуть бути одномерними або багатовимірними масивами, де ви можете виділити проти db, dw, dd, dq, xmmword або ymmword.
Ми побачимо це в коді, коли ми станемо більш досвідченими в серії, але критично важливо, щоб ви зрозуміли змінні всередині функції є місцевими і потрапляють на стека, оскільки вони не тривають протягом усієї програми. Ці змінні, які є частиною сегменту даних, не місцеві, вони глобальні і потрапляють на стік.
Стек - місцеві змінні - зростає вниз у пам'яті, тому вони починаються з високої адреси пам'яті і зростають вниз. Стік - глобальні змінні - зростає з нижньої адреси пам'яті і зростає вгору.
Якщо у вас є питання, запитайте їх у коментарях, оскільки критично важливо, щоб ви зрозуміли цей концепт, коли ми почнемо будувати нашу дуже базову операційну систему.
Наступна неділя ми вийдемо на SHL! Залишайтесь на підтримці!