Частина 2 – Системи чисел

Для повного змісту змісту всіх уроків, будь ласка, натисніть нижче, оскільки це надасть вам короткий зміст кожного уроку, а також теми, які будуть розглянуті. https://github.com/mytechnotalent/Reverse-Engineering-Tutorial

У серцевині мікропроцесора знаходяться ряд бінарних чисел, які можуть бути або +5В (ввімкнено або 1) або 0В (вимкнено або 0). Кожна 0 або 1 представляє окремий біт інформації в мікропроцесорі. Кombinatsiya 8 бітів призводить до однієї байта. До того, як ми приступимо до бінарної системи, давайте розглянемо знайому десяткову. Якщо ми візьмемо число 2017, ми зрозуміємо це як дві тисячі сімнадцять.

Давайте розглянемо бінарну систему та її основи роботи.

Якщо ми перетворимо бінарне число на десяткове, ми дуже просто зробимо наступне. Давайте візьмемо бінарне число 0101 1101 і, як ви бачите, воно становить 93 десяткові.

Додавання значень в стовпці значення дозволяє нам отримати 0 + 64 + 0 + 16 + 8 + 4 + 0 + 1 = 93 десяткові. Якщо ми перетворимо десяткове число на бінарне, ми перевіримо, чи можливо віднімання відносно найбільшої бітової одиниці, і якщо так, то в бінарний стовпець буде розміщено 1, а залишок буде перенесений в наступну строку. Давайте розглянемо приклад десяткового значення 120, яке є 0111 1000 бінарним.

1)Можливо, 128 поміститися в 120: Ні, тому 0. 2)Можливо, 64 поміститися в 120: Так, тому 1, потім 120 – 64 = 56. 3)Можливо, 32 поміститися в 56: Так, тому 1, потім 56 – 32 = 24. 4)Можливо, 16 поміститися в 24: Так, тому 1, потім 24 – 16 = 8. 5)Можливо, 8 поміститися в 8: Так, тому 1, потім 8 – 8 = 0. 6)Можливо, 4 поміститися в 0: Ні, тому 0. 7)Можливо, 2 поміститися в 0: Ні, тому 0. 8)Можливо, 1 поміститися в 0: Ні, тому 0. Коли ми хочемо перетворити бінарне на хекс, ми дуже просто працюємо з наступною таблицею.

Давайте перетворимо бінарне число, наприклад, 0101 1111 на хекс. Для цього ми дуже просто переглядаємо таблицю та порівнюємо кожен ніббл, який складається з 4 біта. Увага, 8 біта рівна одному байту, а 2 ніббла рівні одному байту. 0101 = 5

1111 = F

Отже, 0101 1111 бінарне = 0x5f хекс. Означення 0x позначає хекс. Для перетворення з хекса на бінарне дуже просто потрібно зробити навпаки, наприклад: 0x3a = 0011 1010

3 = 0011

А = 1010

Важливо розуміти, що кожен хексовий символ є нібблом довжиною, тому два хексових символи є байтом довжиною. Для перетворення з хекса на десяткове ми робимо наступне: 0x5f = 95

5 = 5 х 16^1 = 5 х 16 = 80

F = 15 х 16^0 = 15 х 1 = 15

Отже, ми бачимо, що 80 + 15 = 95, яке є 0x5f хексом. Нарешті, щоб перетворити з десяткового на хекс, давайте візьмемо число 850 десяткове, яке є 352 хексом.

Ми поєднуємо числа віднизу вгору і отримуємо 352 хекс. “Чому ж я божеволію свій час витрачаю на вивчення цього бруду, коли комп'ютер робить усе це за мене?”

Якщо ви знаєте будь-яких реверс-інженерів, будь ласка, якщо б ви взяли хвилину і запитали їх цю питання. Реальність така, що якщо ви не маєте дуже міцної розуміння того, як усе це працює, ви будете мати важкі часи, щоб захопити уявлення про те, як регістрів процесора ARM зберігають і маніпулюють даними. Ви також будете мати важкі часи, щоб захопити уявлення про те, як процесор ARM працює з бінарним переповненням і його вплив на роботу операцій перенесення, ні про те, як працюють операції порівняння, ні навіть про найпростіші операції найпростішого асемблера. Я не пропоную вам вивчати це за пам'ять, ні я не пропоную виконувати тисячу прикладів кожного. Я тільки прошу, щоб ви взяли час, щоб справжньо зрозуміти, що буквально все і я маю на увазі все, йде до бінарних бітів у процесорі. Чи ви створюєте, чи відлагоджуєте чи хакуєте Асемблер, Python, Java, C, C++, R, JavaScript чи будь-яку іншу нову мову програми, яка потрапляє на вулицю, у кінцевому підсумку все має йти до бінарних 0 і 1, які представляють +5В або 0В. Ми як люди працюємо на основі десяткової системи з основою 10. Процесор працює на основі шістнадцятирічної системи (гекс). Регістр, з яким ми працюємо разом з Linux, адресуються розміром 32 біти. Коли ми почнемо розмову про регістрів процесора, ми навчимося, що кожен з них має ширину 32 біти (теоретично BCM2837 мають ширину 64 біти, проте наш варіант Linux, яким ми працюємо, має розмір 32 біти, тому ми тільки звертаємо увагу на 32 біти кожного регістра). Наступного тижня ми вийдемо на тему бінарної додавання! Підтримуйте нас!

results matching ""

    No results matching ""