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 21:00 · Личное сообщение · #2 |
|
Создано: 13 марта 2019 21:25 · Поправил: cppasm · Личное сообщение · #3 |
|
Создано: 13 марта 2019 22:30 · Поправил: e_sergey · Личное сообщение · #4 |
|
Создано: 13 марта 2019 22:41 · Личное сообщение · #5 |
|
Создано: 13 марта 2019 22:57 · Поправил: e_sergey · Личное сообщение · #6 |
|
Создано: 13 марта 2019 23:07 · Личное сообщение · #7 e_sergey пишет: а данные берутся именно с RSI , грибы видать не мои ... Это был lea=Load Effective Address, инструкция, которая в том числе тупо для умножения+сложения чисел используется, в твоем случае 11*40+30=470=0x1D6, никакого адреса там нету и правильно его вычислить было невозможно, потому что ты даже мнемонику инструкции не ту назвал. ----- 2 оттенка серого |
|
Создано: 13 марта 2019 23:11 · Поправил: e_sergey · Личное сообщение · #8 |
|
Создано: 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 марта 2019 23:23 · Поправил: e_sergey · Личное сообщение · #10 |
|
Создано: 14 марта 2019 00:07 · Поправил: dosprog · Личное сообщение · #11 Нормальный дизассемблер всегда вставляет префикс сегмента "ds:" или "ss:", даже если он не задан явно, когда в дизассемблированном выражении встречаются квадратные скобки. В инструкции <lea> это смысла не имеет, но ассемблер потом такую инструкцию обработает нормально. | Сообщение посчитали полезным: e_sergey |
|
Создано: 14 марта 2019 09:38 · Поправил: cppasm · Личное сообщение · #12 e_sergey пишет: Я же написал - не пинать , пытаешься получить совет или ответ - как тока не обосрут ... Ты не пытаешься получить совет. Точнее он тебе не поможет. Ты пытаешься выяснить как решить квадратное уравнение, при этом не умея даже складывать и умножать. Как ты думаешь, тебе смогут помочь? Открываешь мануал, или в крайнем случае гуглишь, и читаешь что делает команда. Всё. Ни в одной из написанных тобой инструкций за две страницы RSI вообще не упоминается. И данные из этого регистра браться не могут. Вместо того чтобы потратить 5 минут на чтение что делает инструкция ты строишь какие-то теории про ASCII, Unicode и прочий бред. e_sergey пишет: Поклацал буковкой d и все встало на свои места ... При этом превратил команду в данные. Что там при этом у тебя встало на места я даже боюсь представить. И кстати, с чего обсуждение перешло на LEA? Я что-то не вижу чтобы автор топа подтвердил что у него там LEA, а не MOV. Нужен кусок кода который обсуждается, а так тема сплошной цирк... |
|
Создано: 14 марта 2019 09:50 · Поправил: f13nd · Личное сообщение · #13 cppasm пишет: И кстати, с чего обсуждение перешло на LEA? Он кучу картинок выложил, видимо удалили уже. Ты какие-то японские хокку пишешь) На самом деле можно даже не знать ассемблер, просто разглядывая листинг к примерному пониманию прийти как какая инструкция устроена (убедился в этом однажды, с этого и начал реверсом заниматься). Потом уже привычка выработается мельком глянув где константы понять где в каком ассемблере приемник слева или справа и прочее. Основные мнемоники у разных архитектур часто совпадают, вообще можно ничего не учить и в справочник не лезть лишний раз. Просто надо быть внимательней, особенно если водружаешь свою проблему на чужую голову. ----- 2 оттенка серого |
|
Создано: 14 марта 2019 10:19 · Личное сообщение · #14 |
|
Создано: 14 марта 2019 10:20 · Поправил: e_sergey · Личное сообщение · #15 |
|
Создано: 14 марта 2019 10:25 · Поправил: cppasm · Личное сообщение · #16 f13nd - это работает если знаешь ассемблер хоть под одну архитектуру. Тогда под другую можно и без манов разобраться (большинство команд). Если нифига не знаешь - прийдётся читать, от разглядывания мнемоники понимание не прийдёт | Сообщение посчитали полезным: SReg |
|
Создано: 14 марта 2019 10:38 · Поправил: f13nd · Личное сообщение · #17 Gideon Vi,cppasm в конструкции <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 оттенка серого |
|
Создано: 14 марта 2019 12:23 · Поправил: cppasm · Личное сообщение · #18 f13nd пишет: достаточно убедительно? Нет. Ты рассуждаешь с точки зрения человека который знает этот ассемблер. Теперь давай то же самое про fstsw, lzcnt или bsr. Вот cdqe у тебя на скрине есть, ага - можно и про неё. Не говоря уже про ассемблеры с тремя операндами или где один и тот же опкод выполняет разные операции в зависимости от текущего контекста (предыдущих команд). | Сообщение посчитали полезным: sefkrd |
|
Создано: 14 марта 2019 12:38 · Личное сообщение · #19 cppasm пишет: Нет. Ну мне когда-то хватило w32dasm чтоб первую лицензионную защиту починить, справочник не открывал честно-честно. Пруфов нету. "fstsw, lzcnt или bsr" это еще напрячься надо чтоб такую экзотику в коде найти. Про контексты да, 'exts' в c166 однажды перевернуло мой мир, но я это пережил. Если тебя интересует какая-то деталь и ты не знаешь как ее словесно описать, в справочнике ты это будешь искать очень долго. Наблюдать и думать над происходящим полезная привычка. Если в любой непонятной ситуации тебе нужен справочник или совет, что ты будешь делать там, где никто тебе ни справки ни совета не даст? Весь реверс про это. ----- 2 оттенка серого |
|
Создано: 14 марта 2019 12:40 · Личное сообщение · #20 |
|
Создано: 14 марта 2019 12:42 · Поправил: f13nd · Личное сообщение · #21 |
|
Создано: 14 марта 2019 13:02 · Личное сообщение · #22 |
<< . 1 . 2 . |
eXeL@B —› Вопросы новичков —› Как вычислить адрес в ассемблере |
Эта тема закрыта. Ответы больше не принимаются. |