Сейчас на форуме: Rio (+4 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Коды ассемблера? |
Посл.ответ | Сообщение |
|
Создано: 27 ноября 2007 20:45 · Личное сообщение · #1 Господа!!! 2 вопроса: 1. При трассировке в OllyDBG в регистр EAX и EDX были внесены следующие значения EAX 00971EA0 ASCII “H:\Course1\” Насколько я понял 00971EA0 это есть закодированное значение “H:\Course1\”. По какому алгоритму кодируется это (HEX -> ASCII) и наоборот? 2. Натолкнулся на такую последовательность Mov EDX, DWORD PTR SS:[EBP-14] Расшифруйте, плз, что бы это значило, как работает и что делает. Не нашел об этом в своей скудной библиотеке… ![]() |
|
Создано: 27 ноября 2007 21:09 · Личное сообщение · #2 |
|
Создано: 27 ноября 2007 21:15 · Поправил: Gerpes · Личное сообщение · #3 |
|
Создано: 27 ноября 2007 21:28 · Личное сообщение · #4 |
|
Создано: 27 ноября 2007 21:32 · Личное сообщение · #5 |
|
Создано: 27 ноября 2007 23:05 · Личное сообщение · #6 |
|
Создано: 27 ноября 2007 23:35 · Личное сообщение · #7 Ну раз уж создан этот топик, чтобы ему даром не пропадать, ещё один тупой вопрос: Команда FLD DWORD PTR DS:[xxxxxxxx] загружает число с плавающей точкой из сегмента данных по адресу xxxxxxxx Например если там лежит $3F200000, загружается 0.625 если $42301530, загружается 44.020690917968750000 Как этот порядок и мантисса вычисляется не въехал читал --> тут <-- http://www.wasm.ru/article.php?article=edfpu01 хорошую статью, но всё равно не въехал... Напишите формулу для этих конкретных примеров! ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh ![]() |
|
Создано: 28 ноября 2007 01:25 · Поправил: Gerpes · Личное сообщение · #8 ААА- мой мозг!!! ![]() ![]() Короче- 3F 20 00 00 - переводим в бинарник - 0011 1111 0010 0000 0000 0000 0000 0000 Мантисса- от нуля- до 22 бита, т.е 23 бита всего - считаем: 010 0000 0000 0000 0000 0000 ноли откидываем, а т.к старший бит всегда 1 (по умолчанию скрыт), то возвращаем на место. в итоге: 1,01 . Далее- порядок нам нужен. берем остатки - 24 - 31 биты- это 11 1111 0 (ноль слева нафиг) переводим - это 126 , вычитаем 127 (смещение), =-1 ! , т.е запятую в мантиссе надо смещать в другую сторону, т.е: 0,101bin = 0,625dec !! Вторую пару чисел уже нафиг не хочу, спать надо. Если есть ошибка, поправьте. Но вроде, все нормально должно быть. Не такой уж имхо, и ламерский вопросик, обычный математический, может, просто к крекингу не очень относится. Чуть не забыл- 32 бит- знаковый. 0 это+ ![]() |
|
Создано: 28 ноября 2007 01:36 · Поправил: Gerpes · Личное сообщение · #9 |
|
Создано: 28 ноября 2007 01:39 · Личное сообщение · #10 |
|
Создано: 28 ноября 2007 01:56 · Личное сообщение · #11 |
|
Создано: 28 ноября 2007 01:57 · Поправил: Gerpes · Личное сообщение · #12 Listopad Никак HEX в ASCII, сам-то понял? ASCII -это и есть хекс коды символов, по таблице. эта строка H:\Course1\ была загружена в память на этот адрес. если файло не паковано/криптовано, открой в хекс едиторе, найди ее, и если найдешь, тогда увидишь, как она выглядит. должна быть примерно так: 48 3A 5C 43 6F 75 72 73 65 31 5C H:\Course1 не найдешь, если прога эту строку уже в процессе работы считала. Никто ничего не переводит- это одно и то же. v0id2k дело говорит, правда, Калашников не для Виндуса, зато понятно. ![]() |
|
Создано: 28 ноября 2007 03:14 · Личное сообщение · #13 |
|
Создано: 28 ноября 2007 06:20 · Личное сообщение · #14 Isaev, вот тут ещё по floating point: в моём посте: http://exelab.ru/f/action=vthread&topic=10264&forum=5&page =-1 ![]() |
|
Создано: 28 ноября 2007 07:01 · Личное сообщение · #15 |
|
Создано: 28 ноября 2007 09:38 · Поправил: Bitfry · Личное сообщение · #16 v0id2k пишет: Листопад, не в обиду, может прежде чем брать отладчег в руки стоит почитать как минимум рассылку калашнегова? =\ +1 Listopad, срочно читать всё с bitfry.narod.ru Listopad пишет: Mov EDX, DWORD PTR SS:[EBP-14] В исходнике это это обращение к локальной переменной. ЗЫ Слышал я про таких программистов, которые не понимают, что такое указатели, но раньше думал, что это миф. ----- Всем привет, я вернулся ![]() |
|
Создано: 28 ноября 2007 11:57 · Поправил: SeaMan · Личное сообщение · #17 Listopad пишет: По какому алгоритму кодируется это (HEX -> ASCII) и наоборот? Алгоритма никакого нет. ASCII это не буквы которые ты видиш на экране. Это таблица символов (букв) к которым присвоены HEX-значения. Например: Латинская буква "A" будет храниться в памяти как HEX значение "61", Буква "B" как HEX "62" итд. Вот глянь на такую таблицу и всё станет ясно. Listopad пишет: Я в основном и спрашивал каким образом асм хранит в HEX текстовую информацию (аналогично последнему топико о числах)... АСМ не хранит текстовую информацию. АСМ Это язык программирования низкого уровня. Т.е в коем роде всё что ты пишешь текстом (mov, ret, sub итд) он переводит в машинные команды типа: 01000101011010. Эти же машинные команды можно представить в разных формах. Например: Hexadecimal (HEX), Octal (Oct), ASM (Assembler), ASCII (символьная информация) Текстовая информация хранится в оперативной памяти и на носителях информации (например на харде) чаще всего в ASCII. А отладчик выводит на экран эту информацию первоначально в виде HEX значений. У отладчиков есть много режимов отображений. Например тот же текст можно отобразить как ассемблерный листинг в виде машинных команд. Поэтому прежде чем начать разбираться с тем, что тебе показывает отладчик, нужно уточнить правильный это режим или нет. Bitfry пишет: ЗЫ Слышал я про таких программистов, которые не понимают, что такое указатели, но раньше думал, что это миф. Я раньше такой "программист" был. Писал на Бейсике программы и не знал где и как хранятся мною используемые переменные. ![]() ![]() |
|
Создано: 28 ноября 2007 15:19 · Личное сообщение · #18 SeaMan пишет: Это таблица символов (букв) к которым присвоены HEX-значения. Похоже, у тебя в голове ещё слишком жидкая каша. Символы кодируются числами, а не системами представления этих чисел. ![]() Всё разумное, что ты выше написал можно свести к простой фразе: В двоичных машинах всё кодируется битами. ![]() ----- Всем привет, я вернулся ![]() |
|
Создано: 28 ноября 2007 17:25 · Поправил: Grom_ · Личное сообщение · #19 Gerpes пишет: ASCII -это и есть хекс коды символов ![]() по идее ASCII это стандарт который говорит об определенном диапазоне чисел(число 8 бит, от 0 до 255), при этом каждому числу соответствует определенное значение(символ или "действие"-это про код звука или перевода каретки и т.п., так то это тоже код символа). По сути обобшено можно сказать что это массив с символами , обратился к 61 ячейки получил Большую латинскую 'А' , обратился к 13 ячейки , получил перевод строки. HEX формат - это отображение(представление) 16-ричного формата двоичных(т.к. железо знает биты ) данных(по байтово, по словам и т.п. ) . это не кодировка !!! это просто для удобства. Или удобнее все смотреть в двоичном виде ? ![]() Строка твоя находиться в памяти начиная с адреса 0хХХХХХХХХ , значит первая буква находится по этому адресу(если по стандарту С то в конце строки последний байт будет равняться 0). Первая буква потому что это ASCII кодировка в ней 1 символ занимает 1 БАЙТ! , если бы к примеру у тя была бы строка в Уникод Формате 16 , то символ бы занимал уже 2 байта(и адрес указывал бы на начало старшей части первой буквы, "типо того"). По этому то в Ольге и есть переключение представления данных, попробуй переключиться в Уникод16 и увидешь как строка измениться. А HEX не поменяется, т.к. он поменяется если измениться его код , а не его представление при отображении. ![]() |
|
Создано: 28 ноября 2007 18:07 · Личное сообщение · #20 |
|
Создано: 28 ноября 2007 19:25 · Личное сообщение · #21 Grom_ пишет: HEX формат - это отображение(представление) 16-ричного формата двоичных(т.к. железо знает биты ) данных(по байтово, по словам и т.п. ) . это не кодировка !!! Об этом и так все знают, пару ответами выше это понятно (мантиссы считали) И то, что, например, символ 1 это 31h в таблице - тоже всем понятно, кому нет- посмотрят. И хватит об этом, не нужно цепляться к словам. ASCII - тема детская. alexey_k Спс, посмотрим, время будет.. ![]() |
|
Создано: 28 ноября 2007 20:38 · Личное сообщение · #22 Bitfry пишет: Символы кодируются числами, а не системами представления этих чисел. Ну вот и началось! Где то я подобный топик тут уже встречал. Правда не такуюже тему, но тоже началось вроде со смешных вопросов новичков и закончилось разборками ветеранов между собой, кто и что несовсем точно обьяснил и кто что на самом деле имел ввиду. Я имел ввиду что ASCII никакой ни алгоритм. А то что SeaMan пишет: Это таблица символов (букв) к которым присвоены HEX-значения. А что сдесь не так? Можно конешно было написать что это стандарт итд. Но таблица то всё таки есть? И кто о ней не слышал ничего - многое поймёт увидев её. Bitfry пишет: Похоже, у тебя в голове ещё слишком жидкая каша. Bitfry давай не будем измерять умственные члены! ![]() Bitfry пишет: а не системами представления этих чисел. а я такого и не писал SeaMan пишет: Эти же машинные команды можно представить в разных формах. Например: Hexadecimal (HEX), Octal (Oct), ASM (Assembler), ASCII (символьная информация) ![]() |
|
Создано: 23 марта 2008 16:21 · Поправил: qwerty1999 · Личное сообщение · #23 Не, чего-то вы хреноты понаписали, вот как всё есть на самом деле: 1). В компьютере есть только нули и единицы. 2). Люди бинарный код плохо понимают - удобнее HEX (он короче). 3). HEX и двоичная система-это одно и тоже - это всего-навсего символы чтобы записать истинное значение и свой смысл они обретают только в контексте, так-же как буква "А" не содержит в себе звука - и если читать древние языки, то понимая смысл, мы никогда не узнаем как они звучали. 4). При записи текста удобнее читать буквы(слова) чем HEX или биг, поэтому надо сказать компьютеру чтобы он вместо того или иного кода писал букву. 5). Чтобы компьютеры знали, какие буквы писать, есть таблицы. 6). Одна из этих таблиц-ASCII. 7). Команды компьютера- это тоже данные, они должны как-то храниться. 8). В компьютере информация существует только в виде нолей и единиц. Значит команды тоже хранятся в таком виде. Они могут совпадать с кодами аскии. Поэтому ты их и видишь как некую тарабарщину(открой любой ехе в блокноте). 9). В каком виде просматривать информацию(и команды и текст), зависит от твоего желания, если ты монстр, то можешь читать тексты в бинарном виде или нехе(открой текстовый файл в hiew'e или winhexe). 10). Таким образом мы выяснили, что информация бессмысленна сама по-себе, нужен интерпретатор(не cmd, а голова или проц). 11). Проц тупее головы, поэтому ему говорят специально: вот здесь у нас данные, а здесь-команды(читай про формат PE). 12). Создатели отладчиков говорят отладчикам отображать данные как текст, сопоставляя биты с таблицей аски. А команды - с опкодами(ассемблер-это просто запись инструкций проца в виде слов: например "+" в ассемблере пишется как "плюс" (на самом деле плюса никакого нигде нет, проц просто переключит свои транзисторы по определенной схеме, в ответ на управляющее значение, и получится как бы плюс)) 13). Короче: перекодировка действительно происходит, только к смыслу дизассемблеров и отладчиков она имеет такое-же отношение как рубка деревьев с целью изготовления из них бумаги К содержимому книги, на сделанной из этой бумаги. ![]() |
|
Создано: 23 марта 2008 16:51 · Личное сообщение · #24 |
![]() |
eXeL@B —› Вопросы новичков —› Коды ассемблера? |
Эта тема закрыта. Ответы больше не принимаются. |