Глюконатор
24.05.2008, 20:47
Почитав наш любимый форум и пообщавшись с нубами я понял одну вещь.. Много юзеров этого форума имеют плохие представления о шестнадцатиричной системе счисления (далее 16 СС или хекс). Дабы уменьшить пустоты в этой области знаний пишу данный ликбез.
Начнем с азов.
Хекс система имеет слегка "непривычный" нам (бренным телам) набор чисел. А именно: 0 1 2 3 4 5 6 7 8 9 A B C D E F. ЧислА G (да и всех последующих) в ней нет, поэтому при изменении значений смысла писать эту букафку тоже нет. Любой фаил, который вы откроете хекс-редактором в первую очередь предстанет перед вами в виде наборов этих циферо-буковок. По идее все данные там идут друг за дружкой, но для удобства программы-редакторы разбивают их на пары (0Е 3А и т.д.). Такие пары по буржуйски зовутся оффсетами (offset) или по нашински - байтами (Напомню, что 1 байт = 2^8 бит = 256 значений, которые хексом кодируются всеми различными парами от 00 до FF). Так же каждый байт имеет свой адрес, который тоже записывается в хекс.
Получение хекс значения.
Для того, чтобы получить аналог нашего с вами числа в хекс существует несколько способов:
Самый доступный. При условии что у вас винда).
Открываем калькулятор и включаем в нем инженерный вид.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Перед нами великое творение мелкомягких во всем его великолепии. Слева вверху мы видим незамысловатые надписи Hex и Dec (остальные нас не интересуют).
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Как уже наверное некоторые догадались Hex - режим отображения в хекс, Dec - в привычной нам 10 СС. Для того чтобы получить хекс значение - выделяем Dec и вводим наше с вами число. Затем тыкаем на Hex и... бах! Получаем значение в хекс-формате. Эта незамысловатая утилитка разбивает значения в группы по 4. Этого можно не пугаться, итоговое значение при копировании будет таким каким нам нужно. Кстати зачем она это делает - ума не приложу.. наверное понтуецо =)
Для получения десятичного числа из хекс делаем все с точночстью до наоборот. Т.е. сначала тыкаем Hex, вводим число и тыкаем Dec.
.
Для счастливых обладателей WinHex ([Ссылки могут видеть только зарегистрированные и активированные пользователи])'а.
----
И сказал пророк:"Открой ВинХекс и тыкни на F8. Будет тебе счатье до конца дней твоих!"
----
Следуя наказам пророка поступаем в точности как он говорил. И, о чудо! Перед нами появляется великое окошечко!
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь все, что от нас требуется это ввести либо хекс значение либо десятичное. Они вводятся слева и справа соответственно (для тех, кто в танке: 1000 - это десятичное число, 3Е8 - хекс). Далее тыкается ентер и мы получаем нужное нам число в соответствующей графе. Усе.
.
Юзерам, имеющим в своем арсенале Hex Editor Neo ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).
Для начала стоит открыть Base Convertor, если он у еще не открыт конечно =) Для свершения сего чудного действа следует пойти по пути View -> Tool Windows -> Base Converter.
Перед нами в виде доп. панельки появится незамысловатое окошечко с кучей полей... из которых нас интересуют только Decimal и Hex.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Люди, еще не потерявщие цепочку логических рассуждений наверняка догадались, что в поле Decimal вводится десятичное число, а его шестнадцатиричный аналог можно будет лицезреть в поле Hex. Конвертация идет незамделительно, так что никаких дополнительных телодвижений не требуется.
.
Для продвинутых читеров.
Люди использующие СЕ (Cheat Engine, есть в архиве темы ([Ссылки могут видеть только зарегистрированные и активированные пользователи])) могут прибегнуть к оч хитрой фишке этой программы. А именно:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
В выделенном мною (красным прямоугльничком) поле ввести значение нуждающееся в переводе (при вводе хекс-значения - галочка Hex есть, при вводе десятичного значения галочки нет)... и... поставить или убрать соответственно галочку! :forward: Усе. Число переведтся в выбранную СС.
Запись хекс значения
Трудная часть закончилась. Теперь начнется АД. Дело в том, что все числа хранятся в "неправильном" порядке. А именно задом-наперед.
Для того, чтобы нам правильно вписать число в память, нужно проделать несколько простых действий:
Разбить наше с вами хекс число на пары. Начинать с правого конца. Для примера я возьму длинное число:
009624D4
В итоге получаем:
00 96 24 D4
Если чисел нечетное количество, к примеру 3Е8, то оставшееся одинокое число (оно всегда должно получаться слева) дополнить ноликом. 03 Е8.
Так же замечу, что если вам известо, что в данной области памяти хранится число определенного размера (к примеру 4 байта), а цифорок даже по прикидкам "на глаз" слегка меньше, то надо дописать нолики до этой размерности. На примере того же числа: 00 00 03 Е8.
.
Поменять байты местами. Т.е. последний станет первым, предпоследний - вторым и т.д. В нашем случае получаем:
D4 24 96 00
Для второго числа:
Е8 03 00 00
.
Полученную последовательность спокойно вписывать в память.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Для получения правильного значения в 10 СС делаем все в обратной последовательности (от пункта 3 к пункту 1).
Незнанием этого "момента" объясняются многие косяки юзеров по типу: "ААА!! Изменил этот пакет и меня выкинуло!!!" Ни для кого не секрет, что первые два байта в пакете (в трафике РФ) - его длина в хекс.
Вот для примера пакет:
12 00 04 05 40 3F 4C 00 13 1E A6 FF 78 0B 81 1D 2B 0B
Первые два байта - 12 00. При правильном переводе в 10 СС мы получим длину равную 18. Подсчитав число байт, убедимся, что значение верное. Дык вот. При изменении длины пакета, длину тоже надо менять. При чем правильно, а не тупым переводом из 10 СС в хекс.
На этом спешу закончить.
__________________________________________________
Все (не считая нубских) вопросы оставляйте тут. По мере возможностей буду деать FAQ. Вопросы типа: "Все сделал как ты написал - ничо ни работаит!" и прочие нубские будут удаляться. Расписывать еще (!) подробнее я не собираюсь, ибо считаю что получится некое неуважение к форумчанам (типа ваще для дибилоф).
Начнем с азов.
Хекс система имеет слегка "непривычный" нам (бренным телам) набор чисел. А именно: 0 1 2 3 4 5 6 7 8 9 A B C D E F. ЧислА G (да и всех последующих) в ней нет, поэтому при изменении значений смысла писать эту букафку тоже нет. Любой фаил, который вы откроете хекс-редактором в первую очередь предстанет перед вами в виде наборов этих циферо-буковок. По идее все данные там идут друг за дружкой, но для удобства программы-редакторы разбивают их на пары (0Е 3А и т.д.). Такие пары по буржуйски зовутся оффсетами (offset) или по нашински - байтами (Напомню, что 1 байт = 2^8 бит = 256 значений, которые хексом кодируются всеми различными парами от 00 до FF). Так же каждый байт имеет свой адрес, который тоже записывается в хекс.
Получение хекс значения.
Для того, чтобы получить аналог нашего с вами числа в хекс существует несколько способов:
Самый доступный. При условии что у вас винда).
Открываем калькулятор и включаем в нем инженерный вид.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Перед нами великое творение мелкомягких во всем его великолепии. Слева вверху мы видим незамысловатые надписи Hex и Dec (остальные нас не интересуют).
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Как уже наверное некоторые догадались Hex - режим отображения в хекс, Dec - в привычной нам 10 СС. Для того чтобы получить хекс значение - выделяем Dec и вводим наше с вами число. Затем тыкаем на Hex и... бах! Получаем значение в хекс-формате. Эта незамысловатая утилитка разбивает значения в группы по 4. Этого можно не пугаться, итоговое значение при копировании будет таким каким нам нужно. Кстати зачем она это делает - ума не приложу.. наверное понтуецо =)
Для получения десятичного числа из хекс делаем все с точночстью до наоборот. Т.е. сначала тыкаем Hex, вводим число и тыкаем Dec.
.
Для счастливых обладателей WinHex ([Ссылки могут видеть только зарегистрированные и активированные пользователи])'а.
----
И сказал пророк:"Открой ВинХекс и тыкни на F8. Будет тебе счатье до конца дней твоих!"
----
Следуя наказам пророка поступаем в точности как он говорил. И, о чудо! Перед нами появляется великое окошечко!
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Теперь все, что от нас требуется это ввести либо хекс значение либо десятичное. Они вводятся слева и справа соответственно (для тех, кто в танке: 1000 - это десятичное число, 3Е8 - хекс). Далее тыкается ентер и мы получаем нужное нам число в соответствующей графе. Усе.
.
Юзерам, имеющим в своем арсенале Hex Editor Neo ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).
Для начала стоит открыть Base Convertor, если он у еще не открыт конечно =) Для свершения сего чудного действа следует пойти по пути View -> Tool Windows -> Base Converter.
Перед нами в виде доп. панельки появится незамысловатое окошечко с кучей полей... из которых нас интересуют только Decimal и Hex.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Люди, еще не потерявщие цепочку логических рассуждений наверняка догадались, что в поле Decimal вводится десятичное число, а его шестнадцатиричный аналог можно будет лицезреть в поле Hex. Конвертация идет незамделительно, так что никаких дополнительных телодвижений не требуется.
.
Для продвинутых читеров.
Люди использующие СЕ (Cheat Engine, есть в архиве темы ([Ссылки могут видеть только зарегистрированные и активированные пользователи])) могут прибегнуть к оч хитрой фишке этой программы. А именно:
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
В выделенном мною (красным прямоугльничком) поле ввести значение нуждающееся в переводе (при вводе хекс-значения - галочка Hex есть, при вводе десятичного значения галочки нет)... и... поставить или убрать соответственно галочку! :forward: Усе. Число переведтся в выбранную СС.
Запись хекс значения
Трудная часть закончилась. Теперь начнется АД. Дело в том, что все числа хранятся в "неправильном" порядке. А именно задом-наперед.
Для того, чтобы нам правильно вписать число в память, нужно проделать несколько простых действий:
Разбить наше с вами хекс число на пары. Начинать с правого конца. Для примера я возьму длинное число:
009624D4
В итоге получаем:
00 96 24 D4
Если чисел нечетное количество, к примеру 3Е8, то оставшееся одинокое число (оно всегда должно получаться слева) дополнить ноликом. 03 Е8.
Так же замечу, что если вам известо, что в данной области памяти хранится число определенного размера (к примеру 4 байта), а цифорок даже по прикидкам "на глаз" слегка меньше, то надо дописать нолики до этой размерности. На примере того же числа: 00 00 03 Е8.
.
Поменять байты местами. Т.е. последний станет первым, предпоследний - вторым и т.д. В нашем случае получаем:
D4 24 96 00
Для второго числа:
Е8 03 00 00
.
Полученную последовательность спокойно вписывать в память.
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
Для получения правильного значения в 10 СС делаем все в обратной последовательности (от пункта 3 к пункту 1).
Незнанием этого "момента" объясняются многие косяки юзеров по типу: "ААА!! Изменил этот пакет и меня выкинуло!!!" Ни для кого не секрет, что первые два байта в пакете (в трафике РФ) - его длина в хекс.
Вот для примера пакет:
12 00 04 05 40 3F 4C 00 13 1E A6 FF 78 0B 81 1D 2B 0B
Первые два байта - 12 00. При правильном переводе в 10 СС мы получим длину равную 18. Подсчитав число байт, убедимся, что значение верное. Дык вот. При изменении длины пакета, длину тоже надо менять. При чем правильно, а не тупым переводом из 10 СС в хекс.
На этом спешу закончить.
__________________________________________________
Все (не считая нубских) вопросы оставляйте тут. По мере возможностей буду деать FAQ. Вопросы типа: "Все сделал как ты написал - ничо ни работаит!" и прочие нубские будут удаляться. Расписывать еще (!) подробнее я не собираюсь, ибо считаю что получится некое неуважение к форумчанам (типа ваще для дибилоф).