Сейчас на форуме: Rio (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Коды ассемблера?
Посл.ответ Сообщение

Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 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]

Расшифруйте, плз, что бы это значило, как работает и что делает. Не нашел об этом в своей скудной библиотеке…




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 27 ноября 2007 21:09
· Личное сообщение · #2

Listopad пишет:
EAX 00971EA0 ASCII “H:\Course1\”

регистр EAX содержит 0x00971EA0 что есть адрес (указатель) на стороку “H:\Course1\”

Listopad пишет:
Mov EDX, DWORD PTR SS:[EBP-14]

засунуть в регистр edx то что лежит на стеке по адресу [EBP-14]



Ранг: 61.7 (постоянный), 12thx
Активность: 0.090.02
Статус: Участник

Создано: 27 ноября 2007 21:15 · Поправил: Gerpes
· Личное сообщение · #3

EAX 00971EA0 ASCII “H:\Course1\” 00971EA0 -это адрес в памяти, где строка лежит.


Mov EDX, DWORD PTR SS:[EBP-14] помещение в edx того, что находится - ebp-14 - по этому адресу

опоздал...




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 27 ноября 2007 21:28
· Личное сообщение · #4

Gerpes, race condition Об этом в учебник по принципам OS.



Ранг: 61.7 (постоянный), 12thx
Активность: 0.090.02
Статус: Участник

Создано: 27 ноября 2007 21:32
· Личное сообщение · #5

s0larian

Точно!



Ранг: 221.3 (наставник), 135thx
Активность: 0.190.07
Статус: Участник

Создано: 27 ноября 2007 23:05
· Личное сообщение · #6

Листопад, не в обиду, может прежде чем брать отладчег в руки стоит почитать как минимум рассылку калашнегова? =\

-----
xchg dword [eax], eax





Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 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




Ранг: 61.7 (постоянный), 12thx
Активность: 0.090.02
Статус: Участник

Создано: 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 это+



Ранг: 61.7 (постоянный), 12thx
Активность: 0.090.02
Статус: Участник

Создано: 28 ноября 2007 01:36 · Поправил: Gerpes
· Личное сообщение · #9

Вот еще для двоичной: число A= 2Z*M*2^n

A- число
Z- знак, 0 это+
М- мантисса
n- порядок.



Ранг: 9.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 ноября 2007 01:39
· Личное сообщение · #10

Господа!!!
Я в основном и спрашивал каким образом асм хранит в HEX текстовую информацию (аналогично последнему топико о числах)...

Т.е. по какому алгоритму тот же отладчик переводит HEX в ASCII? и соответственно наоборот...

Правильно ли мое предположение, что в моем случае:
00971EA0=“H:\Course1\”?




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 ноября 2007 01:56
· Личное сообщение · #11

Gerpes Спасибо!
Listopad пишет:
равильно ли мое предположение, что в моем случае:
00971EA0=“H:\Course1\”?

нет, в твоём случае всё прощё... в hex-dumpe в olly посмотри по адресу 00971EA0 (Ctrl+'G') и увидишь эту строку...

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 61.7 (постоянный), 12thx
Активность: 0.090.02
Статус: Участник

Создано: 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 дело говорит, правда, Калашников не для Виндуса, зато понятно.




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 28 ноября 2007 03:14
· Личное сообщение · #13

Gerpes пишет:
просто к крекингу не очень относится.

Относится, уж поверь Некоторые извращенцы специально через FPU серийники считают, чтобы ввести в заблуждение

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 28 ноября 2007 06:20
· Личное сообщение · #14

Isaev, вот тут ещё по floating point: в моём посте:
http://exelab.ru/f/action=vthread&topic=10264&forum=5&page =-1



Ранг: 61.7 (постоянный), 12thx
Активность: 0.090.02
Статус: Участник

Создано: 28 ноября 2007 07:01
· Личное сообщение · #15

Isaev пишет:
Некоторые извращенцы специально через FPU серийники считают, чтобы ввести в заблуждение


Хм. Неплохая запарка тогда получится. Учтем.

s0larian
Сенку за ссылочку со скриптами.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 28 ноября 2007 09:38 · Поправил: Bitfry
· Личное сообщение · #16

v0id2k пишет:
Листопад, не в обиду, может прежде чем брать отладчег в руки стоит почитать как минимум рассылку калашнегова? =\

+1
Listopad, срочно читать всё с bitfry.narod.ru

Listopad пишет:
Mov EDX, DWORD PTR SS:[EBP-14]

В исходнике это это обращение к локальной переменной.

ЗЫ Слышал я про таких программистов, которые не понимают, что такое указатели, но раньше думал, что это миф.

-----
Всем привет, я вернулся




Ранг: 13.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 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 пишет:
ЗЫ Слышал я про таких программистов, которые не понимают, что такое указатели, но раньше думал, что это миф.


Я раньше такой "программист" был. Писал на Бейсике программы и не знал где и как хранятся мною используемые переменные.



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 28 ноября 2007 15:19
· Личное сообщение · #18

SeaMan пишет:
Это таблица символов (букв) к которым присвоены HEX-значения.

Похоже, у тебя в голове ещё слишком жидкая каша.
Символы кодируются числами, а не системами представления этих чисел.
Всё разумное, что ты выше написал можно свести к простой фразе:
В двоичных машинах всё кодируется битами.

-----
Всем привет, я вернулся




Ранг: 29.8 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 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 не поменяется, т.к. он поменяется если измениться его код , а не его представление при отображении.



Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 28 ноября 2007 18:07
· Личное сообщение · #20

To Gerpes. Я вот тоже как-то сталкивался с проверкой серийника по fpu в проге PCMedic, кому интересно по fpu, посмотрите "фалес кейгенми" от bublic'a.



Ранг: 61.7 (постоянный), 12thx
Активность: 0.090.02
Статус: Участник

Создано: 28 ноября 2007 19:25
· Личное сообщение · #21

Grom_ пишет:
HEX формат - это отображение(представление) 16-ричного формата двоичных(т.к. железо знает биты ) данных(по байтово, по словам и т.п. ) . это не кодировка !!!


Об этом и так все знают, пару ответами выше это понятно (мантиссы считали)

И то, что, например, символ 1 это 31h в таблице - тоже всем понятно, кому нет- посмотрят.
И хватит об этом, не нужно цепляться к словам. ASCII - тема детская.

alexey_k
Спс, посмотрим, время будет..



Ранг: 13.0 (новичок)
Активность: 0.020
Статус: Участник

Создано: 28 ноября 2007 20:38
· Личное сообщение · #22

Bitfry пишет:
Символы кодируются числами, а не системами представления этих чисел.


Ну вот и началось! Где то я подобный топик тут уже встречал. Правда не такуюже тему, но тоже началось вроде со смешных вопросов новичков и закончилось разборками ветеранов между собой, кто и что несовсем точно обьяснил и кто что на самом деле имел ввиду.

Я имел ввиду что ASCII никакой ни алгоритм. А то что SeaMan пишет:
Это таблица символов (букв) к которым присвоены HEX-значения.
А что сдесь не так?

Можно конешно было написать что это стандарт итд. Но таблица то всё таки есть? И кто о ней не слышал ничего - многое поймёт увидев её.

Bitfry пишет:
Похоже, у тебя в голове ещё слишком жидкая каша.


Bitfry давай не будем измерять умственные члены! Ну написал не совсем точно, ну главное что суть ясна.


Bitfry пишет:
а не системами представления этих чисел.
а я такого и не писал


SeaMan пишет:
Эти же машинные команды можно представить в разных формах. Например:

Hexadecimal (HEX), Octal (Oct), ASM (Assembler), ASCII (символьная информация)




Ранг: 1.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 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). Короче: перекодировка действительно происходит, только к смыслу дизассемблеров и отладчиков она имеет такое-же отношение как рубка деревьев с целью изготовления из них бумаги К содержимому книги, на сделанной из этой бумаги.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 23 марта 2008 16:51
· Личное сообщение · #24

Что же вы темы то почти полугодовой давности дербаните...


 eXeL@B —› Вопросы новичков —› Коды ассемблера?
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати