По адресу X начинается массив строк aRaz db 'Raz',0 aDva db 'Dva',0 aTri db 'Tri',0 В ESI помещается эта база X - начало. Потом происходит обращение к строчками относительно X mov esi, Xh lea edx, [esi+10] push edx lea edx, [esi+10] push edx lea edx, [esi+10] push edx lea edx, [esi+10] push edx lea edx, [esi+10] push edx lea edx,[esi+20] push edx call Как сделать так, чтобы вместо 10, 20 и т.д. вместо смещений показывались переменный aDva, aTri и т.д. Естественно там другие длинные строки. Первую ида определяется и вместо цифры может подставить буквы mov esi, aRaz
X - это адрес, база, относительно неё все выщитывается. Этот адрес X всегда хранится в esi. А к строчкам идет обращение [X+1000], [X+1203]
Буду сюда про иду писать. Хехе. Другой вопрос. Правильно ли справляется ХексРэйс? MOV EAX,EBX ADD EAX,-5C SUB EAX,2 JB _METKA_ if ( (unsigned int)(myVAR - 0x5c) < 2 )
Так я и написал: Возможно там дальше идет какой-нибудь код с использованием выше вычисленного значения, который компилятор оптимизировал.
Да. Вот меня тоже всё это смущает. Олли показывает коментарий, что в коде есть свитч-кейс, ХексРейс заменяет JE на равно(=), я согласен с этим. А вот почему jb заменяет на минус два, если sub изменяет EAX на два.
В общем вот код такой mov eax, ebx ; EAX = nIndex add eax, -5Ch ; nIndex = nIndex - 5C sub eax, 2 ; nIndex = -5E jb short loc_1 ; < jz short loc_2 ; JE Плагин говорит, что это равнозначно if ( (unsigned int)(nIndex - 0x5C) < 2 ) { //something; } else { if ( nIndex == 0x5E ) { // something } Если с равно я согласен, то вот JB и < 2 меня смущает. Что-то в голове не укладывается. :/
yashechka Правильно декомпилит, хотя и без оптимизации. Что именно не понятно ? sub r,2/jb это и есть <2: IA первый том.
yashechka > То что sub изменяется EAX) SUB это операция соответствующая инструкции одноимённой. Она отнимает 2 от регистра Eax и устанавливает соотвественно результату операции флаги. В вашем случае CF, так как заём происходит. Jb это абстракция - это мнемоника, а не реальный код команды. Наверно было бы понятнее для Jc, но эти две мнемоники соотвествуют одной и той же инструкции(кодировке её): Jb = Jc = Jnae.
Еще раз напишу что SUB и CMP - одно и тоже, отличие только в том что SUB изменяет операнд, а CMP нет.
Ида ошибочно добавляет сноску var_4c = dword ptr -4ch Этой переменной нет, я избавляюсь от неё через Undefine, но в Хексе она продолжает висеть как int v1 // sp+... bp- ... Как пересинхронизировать Хекс? Ведь в Иде её уже нет, а тут она продолжает оставаться.
х86 ещё актуален для десктопов? я как-то игрался с вариацией qsort на х86 Асм коде, но практика показала, что прироста скорости с чистым х86 нет [math]\to[/math] пришлось извращаться с векторными регистрами и вот тогда дело продвинулось