Частина 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! Залишайтесь на підтримці!

results matching ""

    No results matching ""