Сейчас на форуме: 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] в адрес , с которого происходит чтение значения ?




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

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

--> Link <--

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




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

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

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


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



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

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

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




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

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

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

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




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

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

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

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




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

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

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

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

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




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

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

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

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




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

Создано: 13 марта 2019 23:18
· Личное сообщение · #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]

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

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


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

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

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

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

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



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

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

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



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

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

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

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

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

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

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

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

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




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

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

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

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

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





Ранг: 1131.7 (!!!!), 447thx
Активность: 0.670.2
Статус: Участник

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

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





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

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

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

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



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

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

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

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


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

Создано: 14 марта 2019 10:38 · Поправил: f13nd
· Личное сообщение · #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]"

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

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




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

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

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

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

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


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

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

cppasm пишет:
Нет.

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

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




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

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


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




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

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

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

(1,3)

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





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

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

Раз решено, закрыто.


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