Сейчас на форуме: tyns777, bezumchik, Lohmaty (+7 невидимых)

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

Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 13 марта 2019 11:50
· Личное сообщение · #1

Здравствуйте уважаемые гуру .

Подскажите плиз как мне правильно вычислить адрес в ассемблере ,
с которого берется значение в rax ...
64 битная длл
перед этим шагом в rax 0000000000000037

mov rax, ds:1Eh[rax*8]

после чего в rax оказывается нужное мне значение
Вопрос : как мне правильно перевести ds:1Eh[rax*8] в адрес , с которого происходит чтение значения ?



Ранг: 251.3 (наставник), 81thx
Активность: 0.140.11
Статус: Участник

Создано: 13 марта 2019 12:05
· Личное сообщение · #2

Хз из какого дизасма ты это скопировал, но это то же самое что
mov rax, ds:[rax*8+1Eh]
Или тебе надо объяснять что такое умножить и плюс?

| Сообщение посчитали полезным: e_sergey


Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 13 марта 2019 12:12 · Поправил: f13nd
· Личное сообщение · #3

cppasm пишет:
Или тебе надо объяснять что такое умножить и плюс?

Смущает база 1Eh в защищенном режиме, это похоже на rip-relative addressing, такому дизасму точно надо памятник поставить. На могиле.

ЗЫ: поглядеть бы на саму инструкцию в нех, а не на то, что дизасм выдал.

-----
2 оттенка серого




Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 13 марта 2019 12:22 · Поправил: e_sergey
· Личное сообщение · #4

Спасибо за ответы .
Вопрос глупый - но лучше объяснить как правильно слаживать [rax*8+1Eh]
и откуда считать этот адрес - как его перести правильно

памятник поставить - это IDA 7 такое пишет
поглядеть бы на - учусь только неделю - вечером как смогу отвечу со вложением

просьба не пинать сильно




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 13 марта 2019 12:36
· Личное сообщение · #5

Вобщем если инструкция выглядит так: 48 8B 04 C5 1E 00 00 00
То ида 7 ее правда дизасмит как: 'mov rax, ds:1Eh[rax*8]'
И тогда значение должно находиться действительно по 0x1E+rax*8, но каким чудом это работает в длл неясно - базовый адрес ну полный инвалид.

-----
2 оттенка серого


| Сообщение посчитали полезным: e_sergey

Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 13 марта 2019 12:40 · Поправил: e_sergey
· Личное сообщение · #6

базовый адрес ну полный инвалид - вот и у меня такои же вопрос
но значение после этого в rax - то которое нужно

спасибо
вечером будут исходники перед глазами - отпишу с цитатой из хекса



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

Создано: 13 марта 2019 14:04 · Поправил: DrVB_5_6
· Личное сообщение · #7

f13nd пишет:
То ида 7 ее правда дизасмит как: 'mov rax, ds:1Eh[rax*8]'

Так это компилятор, скорей всего наваял. Можно взять и по мануалу вручную раздербанить.
У Ильфака бывает такое.
На самом деле (скорей всего) должно быть так:

mov rax, [rax*8+1Eh] - (просто "Q" в Иде на операнде)

то, что ds присутствует в команде (что Ильфака и повело), так это компилятор.
в этом режиме (64) ds всегда = 0 и никак не влияет.

Лень разбираться, но нормальный вариант команды без ds будет отличаться в хексе!!!
Но Интел хот так, хоть эдак скушает!




Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 13 марта 2019 14:08
· Личное сообщение · #8

DrVB_5_6 пишет:
mov rax, [rax*8+1Eh]

Это просто другой синтаксис, неважно где эта база, за скобками или внутри с плюсом. Дефолтный сегментный регистр тоже ни на что не влияет. Его на самом деле нету в инструкции, ида добавила из педантичности. Если бы пассажир не сказал, что эта инструкция корректно выполняется, это не было бы такой большой загадкой.

-----
2 оттенка серого





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

Создано: 13 марта 2019 14:16 · Поправил: Boostyq
· Личное сообщение · #9

А в чем загадка то? Инструкция
mov rax, qword ptr ds:[rax*8+0x1E]
В rax лежит нужный адрес / 8 (как бы выровненный по 8 байт), а 0x1E это смещение до конечного адреса

Но сегмент с какого фига они берут неясно, XED и IDA его выставляют, но в modrm/sib x64 по умолчанию нет сегмента, и он может быть только переписан префиксом для 0x64(FS)/0x65(GS), остальные префиксы игнорируются, хотя здесь и их нет

-----
В облачке многоточия





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 13 марта 2019 14:20 · Поправил: f13nd
· Личное сообщение · #10

Boostyq пишет:
В rax лежит нужный адрес

e_sergey пишет:
перед этим шагом в rax 0000000000000037

Какой-то он не сильно нужный, если не хочется исключение словить.
Boostyq пишет:
Но сегмент с какого фига они берут неясно

Это масмосинтаксис, там укзазание дефолтного сегмента одна из немногих необязательных вещей, но просто включено в иде для порядка.

-----
2 оттенка серого





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

Создано: 13 марта 2019 14:23
· Личное сообщение · #11

Вы правы, не заметила что он запостил значение

-----
В облачке многоточия




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

Создано: 13 марта 2019 14:27 · Поправил: DrVB_5_6
· Личное сообщение · #12

Boostyq пишет:
(как бы выровненный по 8 байт),

Откуда такое заключение про выравнивание?
f13nd пишет:
перед этим шагом в rax 0000000000000037

Ну и что?
f13nd пишет:
если не хочется исключение словить.

А с чего бы он должно-то быть?
0х37 * 8 + 0x1E




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

Создано: 13 марта 2019 14:29 · Поправил: Boostyq
· Личное сообщение · #13

Опять же что там мы только предполагаем, пускай тс дллку кинет, иначе ерундой занимаемся пытаясь отгадать.
DrVB_5_6 пишет:
Откуда такое заключение про выравнивание?

Если бы в rax было большее значение, это бы сошло за какую нибудь обфускацию, но с таким маленьким это бред.

-----
В облачке многоточия




Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 13 марта 2019 14:30 · Поправил: e_sergey
· Личное сообщение · #14

как получается эти 37 - тоже не поиму
на rax , если помню правильно , сначала 000000000000000A или 000000000000000B (65 или 66)
потом идет mov rax, 28h и rax 0000000000000037 становится (65 - 28 = 37 )
потом mov rax, ds:1Eh[rax*8] идет

если ничего не путаю , остальное смогу добавить только вечером ...
сеичас на работе сижу .




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

Создано: 13 марта 2019 14:36 · Поправил: Boostyq
· Личное сообщение · #15

e_sergey пишет:
на rax , если помню правильно , сначала 000000000000000A или 000000000000000B (65 или 66)
потом идет mov rax, 28h и rax 0000000000000037 становится (65 - 28 = 37 )

Ничоси, это вы в каких системах считаете?
Сложный прекол, расходимся, это тролль.

-----
В облачке многоточия





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 13 марта 2019 14:37
· Личное сообщение · #16

DrVB_5_6 пишет:
А с чего бы он должно-то быть?
0х37 * 8 + 0x1E

Потому что адреса 0-0x10000 зарезервированы, чтоб подобные ошибки ловить. Попытайся выполнить эту инструкцию.

-----
2 оттенка серого




Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 13 марта 2019 14:46
· Личное сообщение · #17

я не считаю ничего - я написал - как получается не понимаю




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

Создано: 13 марта 2019 14:49 · Поправил: Boostyq
· Личное сообщение · #18

А никак, я даже не знаю смеяться или плакать
сначала 000000000000000A или 000000000000000B (65 или 66)
- почему вы думаете что 000000000000000A или 000000000000000B это 'A' и 'B' соответственно из ASCII таблицы?
mov rax, 28h и rax 0000000000000037 становится (65 - 28 = 37 )
- почему вы думаете что инструкция mov вычитает из первого операнда второй?
- почему вы смешиваете hex и dec значения?

-----
В облачке многоточия




Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 13 марта 2019 14:59
· Личное сообщение · #19

-почему

у меня самого их много этих почему , на ваши тоже не могу ответить
извините ...

вероятно догадки лучше оставить до вечера




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 13 марта 2019 18:07 · Поправил: difexacaw
· Личное сообщение · #20

f13nd

> похоже на rip-relative addressing

Нет, не похоже. Так как в RIP базы и индекса SIB нет. Это походу совсем кривой дизасм и значение 1E он взял из 32i смещения.



-----
vx





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 13 марта 2019 18:19 · Поправил: f13nd
· Личное сообщение · #21

difexacaw пишет:
Это походу совсем кривой дизасм

Сложно иду в этом заподозрить (касательно интела). Две версии: либо все было не так, как он рассказал, либо какой-нибудь очень нужный плугин/скрипт через редактирование операнда инструкцию испортил.

-----
2 оттенка серого





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

Создано: 13 марта 2019 19:06
· Личное сообщение · #22

f13nd пишет:
либо все было не так, как он рассказал

Да вы посмотрите что он пишет, тут не может быть либо

-----
В облачке многоточия





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 13 марта 2019 19:12
· Личное сообщение · #23

Boostyq пишет:
Да вы посмотрите что он пишет, тут не может быть либо

Память странная штука, не запомнил числа, неосознанно придумал вспоминая.

-----
2 оттенка серого





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 13 марта 2019 19:28
· Личное сообщение · #24

f13nd

Вероятность второго варианта вашего астрономически мала - асинхронное изменение инструкции.

Что известно наверняка - происходит выборка, тоесть это не вычисление(lea), а чтение из памяти.

Так как сегментации в 64 нет, то конструкции без базы(только индекс без x32 смещения) - это невалид кодировка.

Варианта может быть лишь два - какой то формат, который дизасм не может обработать корректно; либо какая то инструкция, для которой происходит теневая обработка(сработала ловушка, управление вернулось и под отладчиком это не видно).

-----
vx





Ранг: 271.2 (наставник), 331thx
Активность: 0.321.49
Статус: Участник

Создано: 13 марта 2019 19:44
· Личное сообщение · #25

difexacaw пишет:
Вероятность второго варианта вашего астрономически мала

Вероятность того, что внешний вид инструкции будет подправлен и подправлен криво? Почему мала? Это такая фишка в иде, возможность заменять текст инструкции целиком, либо мнемонику, либо любой из операндов. Навесной анализатор или скрипт для подготовки листинга к риппингу могут это делать.

-----
2 оттенка серого





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 13 марта 2019 20:05 · Поправил: difexacaw
· Личное сообщение · #26

Из предоставленной инфы извлечь ничего больше нельзя. Пусть тс покажет последовательность раскодированных значений(15 байт с адреса инструкции), что бы вручную это разобрать и понять.

-----
vx




Ранг: 13.6 (новичок), 1thx
Активность: 0.080
Статус: Участник

Создано: 13 марта 2019 20:26 · Поправил: e_sergey
· Личное сообщение · #27

Парни - на работе ещё
но по ходу получается

1Eh = RS
37*8 = 296 = по юникоду I римская заглавная
Итого значение берется с регистра RSI

проверить смогу позже
башку сломал уже - но на ум приходит только это , скорее все намного проще как кажется ...




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 13 марта 2019 20:35
· Личное сообщение · #28

Удивительно даже, какой только бред разум может создавать используя логические цепочки..

Я думал что это норм вопрос, но увы как всегда.

-----
vx




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

Создано: 13 марта 2019 20:48
· Личное сообщение · #29

а если умножить 1 на 10 будет 11 или 10 пожскажите пожалуйста а то ни как не вкурю?



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

Создано: 13 марта 2019 20:56 · Поправил: hash87szf
· Личное сообщение · #30

бинарь в студию, тролик хД


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