eXeL@B —› Вопросы новичков —› Как вычислить адрес в ассемблере |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 13 марта 2019 11:50 · Личное сообщение · #1 Здравствуйте уважаемые гуру . Подскажите плиз как мне правильно вычислить адрес в ассемблере , с которого берется значение в rax ... 64 битная длл перед этим шагом в rax 0000000000000037 mov rax, ds:1Eh[rax*8] после чего в rax оказывается нужное мне значение Вопрос : как мне правильно перевести ds:1Eh[rax*8] в адрес , с которого происходит чтение значения ? |
|
Создано: 13 марта 2019 12:05 · Личное сообщение · #2 Хз из какого дизасма ты это скопировал, но это то же самое что mov rax, ds:[rax*8+1Eh] Или тебе надо объяснять что такое умножить и плюс? | Сообщение посчитали полезным: e_sergey |
|
Создано: 13 марта 2019 12:12 · Поправил: f13nd · Личное сообщение · #3 |
|
Создано: 13 марта 2019 12:22 · Поправил: e_sergey · Личное сообщение · #4 |
|
Создано: 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 марта 2019 12:40 · Поправил: e_sergey · Личное сообщение · #6 |
|
Создано: 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 будет отличаться в хексе!!! Но Интел хот так, хоть эдак скушает! |
|
Создано: 13 марта 2019 14:08 · Личное сообщение · #8 DrVB_5_6 пишет: mov rax, [rax*8+1Eh] Это просто другой синтаксис, неважно где эта база, за скобками или внутри с плюсом. Дефолтный сегментный регистр тоже ни на что не влияет. Его на самом деле нету в инструкции, ида добавила из педантичности. Если бы пассажир не сказал, что эта инструкция корректно выполняется, это не было бы такой большой загадкой. ----- 2 оттенка серого |
|
Создано: 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), остальные префиксы игнорируются, хотя здесь и их нет ----- В облачке многоточия |
|
Создано: 13 марта 2019 14:20 · Поправил: f13nd · Личное сообщение · #10 Boostyq пишет: В rax лежит нужный адрес e_sergey пишет: перед этим шагом в rax 0000000000000037 Какой-то он не сильно нужный, если не хочется исключение словить. Boostyq пишет: Но сегмент с какого фига они берут неясно Это масмосинтаксис, там укзазание дефолтного сегмента одна из немногих необязательных вещей, но просто включено в иде для порядка. ----- 2 оттенка серого |
|
Создано: 13 марта 2019 14:23 · Личное сообщение · #11 |
|
Создано: 13 марта 2019 14:27 · Поправил: DrVB_5_6 · Личное сообщение · #12 |
|
Создано: 13 марта 2019 14:29 · Поправил: Boostyq · Личное сообщение · #13 |
|
Создано: 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] идет если ничего не путаю , остальное смогу добавить только вечером ... сеичас на работе сижу . |
|
Создано: 13 марта 2019 14:36 · Поправил: Boostyq · Личное сообщение · #15 |
|
Создано: 13 марта 2019 14:37 · Личное сообщение · #16 |
|
Создано: 13 марта 2019 14:46 · Личное сообщение · #17 |
|
Создано: 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 марта 2019 14:59 · Личное сообщение · #19 |
|
Создано: 13 марта 2019 18:07 · Поправил: difexacaw · Личное сообщение · #20 |
|
Создано: 13 марта 2019 18:19 · Поправил: f13nd · Личное сообщение · #21 |
|
Создано: 13 марта 2019 19:06 · Личное сообщение · #22 |
|
Создано: 13 марта 2019 19:12 · Личное сообщение · #23 |
|
Создано: 13 марта 2019 19:28 · Личное сообщение · #24 f13nd Вероятность второго варианта вашего астрономически мала - асинхронное изменение инструкции. Что известно наверняка - происходит выборка, тоесть это не вычисление(lea), а чтение из памяти. Так как сегментации в 64 нет, то конструкции без базы(только индекс без x32 смещения) - это невалид кодировка. Варианта может быть лишь два - какой то формат, который дизасм не может обработать корректно; либо какая то инструкция, для которой происходит теневая обработка(сработала ловушка, управление вернулось и под отладчиком это не видно). ----- vx |
|
Создано: 13 марта 2019 19:44 · Личное сообщение · #25 difexacaw пишет: Вероятность второго варианта вашего астрономически мала Вероятность того, что внешний вид инструкции будет подправлен и подправлен криво? Почему мала? Это такая фишка в иде, возможность заменять текст инструкции целиком, либо мнемонику, либо любой из операндов. Навесной анализатор или скрипт для подготовки листинга к риппингу могут это делать. ----- 2 оттенка серого |
|
Создано: 13 марта 2019 20:05 · Поправил: difexacaw · Личное сообщение · #26 |
|
Создано: 13 марта 2019 20:26 · Поправил: e_sergey · Личное сообщение · #27 |
|
Создано: 13 марта 2019 20:35 · Личное сообщение · #28 |
|
Создано: 13 марта 2019 20:48 · Личное сообщение · #29 |
|
Создано: 13 марта 2019 20:56 · Поправил: hash87szf · Личное сообщение · #30 |
. 1 . 2 . >> |
eXeL@B —› Вопросы новичков —› Как вычислить адрес в ассемблере |
Эта тема закрыта. Ответы больше не принимаются. |