RIP
#04
13 декабря 1997 |
|
Школа хаккера - Цикл "БАЗА -1": Обозначения, Арифметика.
┌────────────────────────────────┐ │ БАЗА-1 │ │ Семинар Первый. Основание. │ │ (Окончание. Начало в RIP#1-#3) │ └────────────────────────────────┘ B1:6 Обозначения. ================= Hа самом деле, такую глобальную роль шестнадцатеричная и восьмеричная системы счисления играют исключительно благодаря алгоритмам Ручного Дракона. Внутри машина считает исключительно "по двоичному". Шестнадцатеричная (или восьмеричная, на DEC'овских машинах) система счисления позволяет вместо длинных цепочек ноликов и единиц писать короткие числа, делает хэкерскую жизнь более разнообразной. Эти системы - промежуточное звено между машиной и человеком, между двоичной и десятичной системами счисления. Роль систем счисления огромная. К примеру, права доступа к файлу в системе UNIX изменяются из shell'а командой chmod. И эта команда требует задания аргумента (прав доступа) в восьмеричной системе счисления! Так команда chmod 666 /etc/passwd открывает полный доступ всем пользователям к файлу паролей в системе UNIX. Вы видите теперь, что даже самые тупые системные администраторы должны разбираться в восьмеричной системе счисления. Так чего же говорить о хэкерах! В различных языках программирования числа в этих системах обозначаются по-разному. Вот сводная таблица для основных языков: +-------------+-------+--------+--------+----------------+ | | C/C++ | Pascal | BASIC | Assembler | +-------------+-------+--------+--------+--------+-------+ | DECimal | 12 | 12 | 12 | 12,12d | 12T | | HEXadecimal | 0xC | $C | &hC | 0Ch | | | OCTal | 014 | нет | &o14 | 14o | 14Q | | BINary | нет | нет | &b1100 | 1100b | 1100Y | +-------------+-------+--------+--------+--------+-------+ В B1:1 мы отметили, что нули в начале числа не влияют на его значение. Создатели языка C решили по другому. Поскольку никто в здравом уме не начинает числа с нуля - кому охота набивать лишнии нулики, ноль в начале они используют для обозначения восьмеричного числа. При всех способах записи регистр букв неважен. Даже строгий на регистры C позволяет начинать шестнадцатеричные числа как с 0x, так и с 0X. Кстати, гуру Киевского Центра нашей Школы, Сергей Головко (2:463/140), сообщил, что в ранних версиях компиляторов C различных фирм шестнадцатеричные числа надо было начинать с 0x0, иначе они глюкали. При программировании на ассемблере если шестнадцатеричное число начинается с буквы, перед ним обязательно должен ставится ноль. Иначе ассемблер подумает, что вы имели в виду переменную Ch, а не число C_16. Ряд людей с низким уровнем интеллекта, не способным вместить это правило, ставят ноль впереди всех шестнадцатеричных чисел. Хуже всего, когда такие люди начинают писать учебники... [IBM PC teaching on] Суффиксы T, Q и Y введены в ассемблер MASM сравнительно недавно. Дело в том, что с помощью директивы .RADIX ассемблер позволяет менять систему счисления, действующую по умолчанию. Раньше, когда систему счисления изменяли на шестнадцатеричную, числа вроде 12D, которые с первого взгляда являются обычными шестнадцатеричными, интерпретировались как 12_10. Это порождало сеть мелких незаметных психоделических ошибок, мешавших чайникам использовать .RADIX 16. [IBM PC teaching off] Мы будем использовать все способы записи чисел, используя ассемблерный способ как основной. Вы должны хорошо владеть всеми способами, потому что в технических дискуссиях по сетям они все активно используются. >>> Для перевода чисел в BASIC'е из десятичной системы счисления в шестнадцатеричную, двоичную и восьмеричную используются функции HEX$, BIN$ и OCT$. Для перевода чисел из этих систем в десятичную надо воспользоваться хитростью. ?VAL("&hFC") <<< В1:7 Арифметика. ================ В любой их систем счисления можно по прежнему складывать, вычитать, делить и умножать. 12A3h 10011b 220_3 - 134h +10101b + 11_3 ---- ------ ---- 16Fh 101000b 1001_3 Попробуйте самостоятельно решить кучу примеров на сложение и вычитание в "компьютерных" системах счисления и не только. 14A3h 1701o | 11o 1101 * 21h -11 +----- *1011 ----- -- | 152o ---- 14A3 60 1101 +2946 -55 + 1101 ----- -- 0000 2A903h 31 1101 -22 -------- -- 10001111 7 Попробуйте делить и умножать в этих системах счисления. Производите побольше дейтвий в уме, развивайте свои способности быстро считать, запоминать информацию. Все это очень важно для аттестаций. [IBM PC teaching on ] Программа hiew позволяет вывести на экран дамп файла. Программа debug.exe имеет команду d, выводящую на экран дамп (dump) памяти. Даже Norton Commander позволяет по F4 выводить содержимое файла в шестнадцатеричном виде. Теперь вы должны очень хорошо представлять себе и чувствовать шестнадцатеричную и другие системы. Hаконец-то вы сможете разобраться в дампе. [IBM PC teaching off] Существуют специальные шестнадцатеричные калькуляторы, позволяющие считать в этих широкораспространенных системах счисления. Я рекомендую вам CITIZEN SRP-75 и его аналоги. Он недорогой и без графики, но, помимо шестнадцатеричной арифметики и логики, он еще и программируемый! 128 шагов! Удачи! Аpви Хаккеp (AtH//HPG) Ars: На этом мы прерываем публикацию Школы. Как бы кто к ней не относился, но определенные знания, согласитесь,почерпнуть из нее можно было. Во всяком случае, все, кто желали, это сделали...
Другие статьи номера:
Похожие статьи:
В этот день... 21 ноября