Русский / Russian English / Английский

Сейчас на форуме: (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

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

Ранг: 13.6 (новичок)
Статус: Участник

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

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

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

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

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


Ранг: 246.0 (наставник)
Статус: Участник

Создано: 13 марта 2019 21:00 New!
Цитата · Личное сообщение · #2

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 13 марта 2019 21:25 · Поправил: cppasm New!
Цитата · Личное сообщение · #3

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


Теперь я знаю кому Клерк сбыл свои протухшие грибы

Ранг: 13.6 (новичок)
Статус: Участник

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

Я же написал - не пинать , пытаешься получить совет или ответ - как тока не обосрут ...


Ранг: 246.0 (наставник)
Статус: Участник

Создано: 13 марта 2019 22:41 New!
Цитата · Личное сообщение · #5

Всего лишь это был не mov, a lea. Не пушкин, а гоголь и не выиграл, а проиграл.

Ранг: 13.6 (новичок)
Статус: Участник

Создано: 13 марта 2019 22:57 · Поправил: e_sergey New!
Цитата · Личное сообщение · #6

Я же написал - подробности вечером
а данные берутся именно с RSI , грибы видать не мои ...

Поклацал буковкой d и все встало на свои места ...


Ранг: 246.0 (наставник)
Статус: Участник

Создано: 13 марта 2019 23:07 New!
Цитата · Личное сообщение · #7

e_sergey пишет:
а данные берутся именно с RSI , грибы видать не мои ...

Это был lea=Load Effective Address, инструкция, которая в том числе тупо для умножения+сложения чисел используется, в твоем случае 11*40+30=470=0x1D6, никакого адреса там нету и правильно его вычислить было невозможно, потому что ты даже мнемонику инструкции не ту назвал.

Ранг: 13.6 (новичок)
Статус: Участник

Создано: 13 марта 2019 23:11 · Поправил: e_sergey New!
Цитата · Личное сообщение · #8

Друга - я же написал - не пинать и подробности вечером

11*40+30=470=0x1D6 - я и просил объяснить - как правильно посчитать ...
тему то не я развивал с грибами и догадками прочими ...


Ранг: 246.0 (наставник)
Статус: Участник

Создано: 13 марта 2019 23:18 New!
Цитата · Личное сообщение · #9

lea rax,[rax + rax*4] ;rax=rax*5
lea rax,[rax*8 + 1Eh] ;rax=rax*8 + 30

А теперь посмотри что ты написал в первом посте.
e_sergey пишет:
64 битная длл
перед этим шагом в rax 0000000000000037

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

Люди сидят решают этот ребус, а у тебя подробности вечером.

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


Ранг: 13.6 (новичок)
Статус: Участник

Создано: 13 марта 2019 23:23 · Поправил: e_sergey New!
Цитата · Личное сообщение · #10

Дак поэтому и сказал - что исходников нет под рукои
писал на память , виноват
извиняюсь, если ввел кого то в непонятки .

Поэтому и написал в названии темы - глупые вопросы ...

Ранг: 409.4 (мудрец)
Статус: Участник

Создано: 14 марта 2019 00:07 · Поправил: dosprog New!
Цитата · Личное сообщение · #11

Нормальный дизассемблер всегда вставляет префикс сегмента "ds:" или "ss:", даже если он не задан явно,
когда в дизассемблированном выражении встречаются квадратные скобки.
В инструкции <lea> это смысла не имеет, но ассемблер потом такую инструкцию обработает нормально.

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


Ранг: 244.1 (наставник)
Статус: Участник

Создано: 14 марта 2019 09:38 · Поправил: cppasm New!
Цитата · Личное сообщение · #12

e_sergey пишет:
Я же написал - не пинать , пытаешься получить совет или ответ - как тока не обосрут ...

Ты не пытаешься получить совет. Точнее он тебе не поможет.
Ты пытаешься выяснить как решить квадратное уравнение, при этом не умея даже складывать и умножать.
Как ты думаешь, тебе смогут помочь?

Открываешь мануал, или в крайнем случае гуглишь, и читаешь что делает команда. Всё.
Ни в одной из написанных тобой инструкций за две страницы RSI вообще не упоминается.
И данные из этого регистра браться не могут.
Вместо того чтобы потратить 5 минут на чтение что делает инструкция ты строишь какие-то теории про ASCII, Unicode и прочий бред.

e_sergey пишет:
Поклацал буковкой d и все встало на свои места ...

При этом превратил команду в данные.
Что там при этом у тебя встало на места я даже боюсь представить.

И кстати, с чего обсуждение перешло на LEA?
Я что-то не вижу чтобы автор топа подтвердил что у него там LEA, а не MOV.
Нужен кусок кода который обсуждается, а так тема сплошной цирк...


Ранг: 246.0 (наставник)
Статус: Участник

Создано: 14 марта 2019 09:50 · Поправил: f13nd New!
Цитата · Личное сообщение · #13

cppasm пишет:
И кстати, с чего обсуждение перешло на LEA?

Он кучу картинок выложил, видимо удалили уже. Ты какие-то японские хокку пишешь) На самом деле можно даже не знать ассемблер, просто разглядывая листинг к примерному пониманию прийти как какая инструкция устроена (убедился в этом однажды, с этого и начал реверсом заниматься). Потом уже привычка выработается мельком глянув где константы понять где в каком ассемблере приемник слева или справа и прочее. Основные мнемоники у разных архитектур часто совпадают, вообще можно ничего не учить и в справочник не лезть лишний раз. Просто надо быть внимательней, особенно если водружаешь свою проблему на чужую голову.


Ранг: 1122.0 (!!!!)
Статус: Участник

Создано: 14 марта 2019 10:19 New!
Цитата · Личное сообщение · #14

f13nd пишет:
можно даже не знать ассемблер, просто разглядывая листинг к примерному пониманию прийти


Ранг: 13.6 (новичок)
Статус: Участник

Создано: 14 марта 2019 10:20 · Поправил: e_sergey New!
Цитата · Личное сообщение · #15

Парни - все с ошибок начинают.
Не все сразу понятно ...

Да и не всегда понятно из описания что делает команда,
а так - торнули носом , показали , объяснили , и все встало на свои места .
Спасибо за дельные ответы .
Теперь если буду что то спрашивать - буду прилагать код .
Надеюсь на понимание .

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 14 марта 2019 10:25 · Поправил: cppasm New!
Цитата · Личное сообщение · #16

f13nd - это работает если знаешь ассемблер хоть под одну архитектуру.
Тогда под другую можно и без манов разобраться (большинство команд).
Если нифига не знаешь - прийдётся читать, от разглядывания мнемоники понимание не прийдёт

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



Ранг: 246.0 (наставник)
Статус: Участник

Создано: 14 марта 2019 10:38 · Поправил: f13nd New!
Цитата · Личное сообщение · #17

Gideon Vi,cppasm
--> Link <--
в конструкции <mnem> <op1>,<op2> цифры справа, значит приемники в этом ассемблере <op1>
"mov r12, cs:off_xxx", ниже "mov rax,r12", "sub rax,rsi", "cmp rax,7" - очевидно "cs:off_xxx" это обращение к памяти, а не адрес (что из него надо вычесть, чтобы получить 7 зачем это надо?)
"mov cs:qword_xxx,rax" - догадка подтверждается, в число нельзя ничего поместить, а приемник <op1>
"lea rax,[rsp+0x70+var_50]", "mov cs:qword_xxx,rax" - это не пересылка данных (почему мнемоники разные?), lea значит что-то другое
"lea rax,[rax+rax*4]", "lea rax,ds:1Eh[rax*8]" - есть логичное объяснение этому? "rax+rax*8" не похоже на адрес, что можно адресовать таким способом? очевидно правый аргумент не выборка данных, а просто помещение в rax значения "[rax+rax*8]"

достаточно убедительно?

Ранг: 244.1 (наставник)
Статус: Участник

Создано: 14 марта 2019 12:23 · Поправил: cppasm New!
Цитата · Личное сообщение · #18

f13nd пишет:
достаточно убедительно?

Нет.
Ты рассуждаешь с точки зрения человека который знает этот ассемблер.
Теперь давай то же самое про fstsw, lzcnt или bsr.
Вот cdqe у тебя на скрине есть, ага - можно и про неё.
Не говоря уже про ассемблеры с тремя операндами или где один и тот же опкод выполняет разные операции в зависимости от текущего контекста (предыдущих команд).

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



Ранг: 246.0 (наставник)
Статус: Участник

Создано: 14 марта 2019 12:38 New!
Цитата · Личное сообщение · #19

cppasm пишет:
Нет.

Ну мне когда-то хватило w32dasm чтоб первую лицензионную защиту починить, справочник не открывал честно-честно. Пруфов нету. "fstsw, lzcnt или bsr" это еще напрячься надо чтоб такую экзотику в коде найти. Про контексты да, 'exts' в c166 однажды перевернуло мой мир, но я это пережил. Если тебя интересует какая-то деталь и ты не знаешь как ее словесно описать, в справочнике ты это будешь искать очень долго. Наблюдать и думать над происходящим полезная привычка. Если в любой непонятной ситуации тебе нужен справочник или совет, что ты будешь делать там, где никто тебе ни справки ни совета не даст? Весь реверс про это.


Ранг: 54.5 (постоянный)
Статус: Участник

Создано: 14 марта 2019 12:40 New!
Цитата · Личное сообщение · #20


я чё то плохо не понял


Ранг: 246.0 (наставник)
Статус: Участник

Создано: 14 марта 2019 12:42 · Поправил: f13nd New!
Цитата · Личное сообщение · #21

SDK пишет:
я чё то плохо не понял

(1,3)


Ранг: 2008.6 (!!!!)
Статус: Модератор
retired

Создано: 14 марта 2019 13:02 New!
Цитата · Личное сообщение · #22

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

Видеокурс ВЗЛОМ