Сейчас на форуме: jinoweb (+5 невидимых) |
eXeL@B —› Программирование —› Visor2. |
<< . 1 . 2 . 3 . |
Посл.ответ | Сообщение |
|
Создано: 15 июля 2018 02:22 · Личное сообщение · #1 Увидел свет в теме Задача решена, осталось просто брать и кодить. Опишу механизм. Оригинальный код не изменяется. Это исключает необходимость подмены данных(трек R-df). В RWX массив накапливаются блоки кода, это части, в которых все инструкции линейные и оканчиваются ветвлением(call/ret/jcc). При записи в этот буфер линейный блок копируется и в конце дописывается jmp near rel на стаб, который выполняет эмуляцию оригинального ветвления. Для быстрого приведения(отображения) оригинального адреса на буфер используем AVL. Дерево содержит описатели блоков, каждый из них содержит: - Оригинальный адрес блока. - Адрес блока в буфере RWX. - Тип ветвления. - Битовую карту переменного размера. - Ссылку(2) на следующий описатель. AVL позволяет выполнить быструю трансляцию адреса на буфер. Сам визор цикл следующий. Блок декодируется и копируется в буфер. Ветвление эмулируется на основе описателя, выбирается ссылка на следующий блок и на него отдаётся управление. После исполнения блока управление получает стаб, выбирает/строит следующий блок и цикл повторяется. Тоесть выполняется блок в буфере - jmp stub - эмуляция ветвления - jmp to next block. Трансляция(поиск описателя блока) происходит на этапе построения новых блоков и при возврате по ret/imp_call_indir. Для рет используем кэширование - сохраняем описатель адреса возврата. Конкретно по реализации. Системные AVL. Добавляем описатель в дерево RtlInsertElementGenericTableAvl(). Получаем описатель по оригинальному адресу RtlLookupElementGenericTableAvl(). Сравнивающий колбек должен определить принадлежность указателя диапазону блока и вернуть ближайший следующий, это происходит на последнем вызове CompareRoutine. Тогда процедура вставки блока будет следующая. 1. Если указатель в блок, то проверяем смещение указателя от начала исходного в битовой карте. В ней помечены начала всех инструкций в блоке. Если маркер установлен, то блок сходится на инструкции и можно выполнить прямое ветвление. 2. Если маркер сброшен, то происходит наложение инструкций(ветвление не на начало). Раскодируем длину и класс инструкции и повторяем цикл, пока не произойдёт схождение. Если произойдёт выход за пределы блока, то строим новый и добавляем описатель в дерево. 3. Если описателя нет, поиск вернёт ближайший следующий. Выполняем п2. После исполнения блока управление получает стаб. Он выгружает контекст, выбирает тип ветвления из описателя и его эмулирует, получая указатель на адрес ветвления. Если блок с ветвью уже описан, ссылка на него получается из ссылки на следующий блок из описателя. Иначе блок строится в конец буфера. Дерево в таком виде служит для быстрой трансляции адреса на буфер, связывания блоков и хранит инфу про ветвление. В отличие от визора первого типа(dye, где блоки копировались каждый раз в буфер), в данном случае профайл должен быть высоким, хотя его может просадить авл трансляция. Как это будет в работе предсказать нельзя, покажут тесты. ----- vx | Сообщение посчитали полезным: 8-9-13-80 |
|
Создано: 23 июля 2018 17:26 · Личное сообщение · #2 |
|
Создано: 23 июля 2018 17:47 · Личное сообщение · #3 |
|
Создано: 23 июля 2018 17:53 · Личное сообщение · #4 |
|
Создано: 24 июля 2018 00:27 · Личное сообщение · #5 f13nd пишет: человеке происходит борьба рационального (пора взрослеть наверное и заниматься чем-то что материальную выгоду приносит, так что вот вам идея, а я умываю руки) и иррационального это всё предсказуемо. и всё объяснимо. каждому возрасту положено своё, так социум эволюционирует и приспосабливается, и если этого рядом нет, стагнация и ...утешение не понятно в чём. на хорошую перспективу, всё внимание собачкам или котикам, рыбкам или свинкам. на плохую, с топорами бегают по ТЦ. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 24 июля 2018 00:38 · Поправил: f13nd · Личное сообщение · #6 Bronco пишет: это всё предсказуемо. и всё объяснимо. каждому возрасту положено своё, так социум эволюционирует и приспосабливается, и если этого рядом нет, стагнация и ...утешение не понятно в чём. на хорошую перспективу, всё внимание собачкам или котикам, рыбкам или свинкам. на плохую, с топорами бегают по ТЦ. --> Link <-- Ничего из этого набора слов не понял, а из статьи можно сделать вывод, что ТСу надо детский плач включать, потому что он снижает внимание и способствует более активной когнитивной обработке предложенной им самому себе задачи Лишь бы окончательно не рехнулся от этого. ----- 2 оттенка серого |
|
Создано: 24 июля 2018 00:39 · Личное сообщение · #7 не знаю, есть ли среди нас киевляне, но у нас в Киеве (да наверное не в одном только в Киеве!) одно время была популярна такая шутка: Вопрос: почему на Крещатике нельзя заниматься сексом? Ответ: будет слишком много советчиков. Так и здесь: пусть человек делает, что хочет. Когда закончит (если закончит), посчитает нужным - покажет результаты. А захочет - не покажет. Вот тогда и будем говорить, обсуждать. По крайней мере будет предметный разговор. А пока - о чем все это? о праве писать софт? Так ведь у нас free country? или нет? ----- Give me a HANDLE and I will move the Earth. | Сообщение посчитали полезным: parfetka, RevCred |
|
Создано: 24 июля 2018 00:54 · Личное сообщение · #8 |
|
Создано: 24 июля 2018 02:27 · Поправил: Bronco · Личное сообщение · #9 plutos пишет: Так и здесь: пусть человек делает, что хочет. чему себя посвятить, конечно это решение ТС. но эгоизм разумен и оправдан, когда это не кумарит окружающих. а такая потребность, быть в центре внимания, по поводу и без, уже попахивает инфантильностью. ----- Чтобы юзер в нэте не делал,его всё равно жалко.. |
|
Создано: 24 июля 2018 07:04 · Личное сообщение · #10 Уже 3 страница оффтопа пошла. Хватит уже не по теме гонять. | Сообщение посчитали полезным: difexacaw |
|
Создано: 24 июля 2018 18:58 · Поправил: difexacaw · Личное сообщение · #11 Тут столько написали.. и всё не поделу. Изначально я создал техническую тему что бы что то по этой теме обсудить. А получается если кто то проходит по ссылке, он не замечает тех вещи, а тупо какие то оценки строит по моей активности и подобному. Вы просто потеряли цель. А два года ушло не только на визор, за это время решались тонны смежных задач. Это не означает что должны быть наработки с нуля, нет конечно. Я за вчера написал кучу кода и основной шаблон. Думаю что то рабочее за неделю получится, что бы как то завести это на апп. ----- vx |
|
Создано: 24 июля 2018 20:30 · Личное сообщение · #12 |
|
Создано: 24 июля 2018 20:41 · Личное сообщение · #13 |
|
Создано: 24 июля 2018 21:33 · Личное сообщение · #14 |
|
Создано: 25 июля 2018 04:19 · Личное сообщение · #15 |
<< . 1 . 2 . 3 . |
eXeL@B —› Программирование —› Visor2. |
Эта тема закрыта. Ответы больше не принимаются. |