Сейчас на форуме: jinoweb (+5 невидимых)

 eXeL@B —› Программирование —› Visor2.
<< . 1 . 2 . 3 .
Посл.ответ Сообщение


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

Создано: 15 июля 2018 02:22
· Личное сообщение · #1

Увидел свет в теме --> Link <--

Задача решена, осталось просто брать и кодить. Опишу механизм.

Оригинальный код не изменяется. Это исключает необходимость подмены данных(трек 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


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

Создано: 23 июля 2018 17:26
· Личное сообщение · #2

SegFault пишет:
у него асм религия

Это не религия, это образ мышления.
SegFault пишет:
для большинства это даже не средство

Согласен. Но есть те, кто не ровняется на большинство.



Ранг: 44.8 (посетитель), 19thx
Активность: 0.040
Статус: Участник

Создано: 23 июля 2018 17:47
· Личное сообщение · #3

f13nd
ваша заинтересованность понятна, нахаляву получить инструмент для решения своих задач по коммерсу, поэтому вас ( не конкретно, а вообще всех коммерсов ) клерк и ненавидит. И в этом тоже есть противоречие.




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

Создано: 23 июля 2018 17:53
· Личное сообщение · #4

SegFault пишет:
ваша заинтересованность понятна, нахаляву получить инструмент для решения своих задач по коммерсу

Прикинь, я вообще в этом не заинтересован. Даже близких этой задач у меня не бывает. И вообще я не сварщик, я просто маску нашел.

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





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 24 июля 2018 00:27
· Личное сообщение · #5

f13nd пишет:
человеке происходит борьба рационального (пора взрослеть наверное и заниматься чем-то что материальную выгоду приносит, так что вот вам идея, а я умываю руки) и иррационального

это всё предсказуемо. и всё объяснимо. каждому возрасту положено своё, так социум эволюционирует и приспосабливается, и если этого рядом нет, стагнация и ...утешение не понятно в чём. на хорошую перспективу, всё внимание собачкам или котикам, рыбкам или свинкам. на плохую, с топорами бегают по ТЦ.
--> Link <--

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





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

Создано: 24 июля 2018 00:38 · Поправил: f13nd
· Личное сообщение · #6

Bronco пишет:
это всё предсказуемо. и всё объяснимо. каждому возрасту положено своё, так социум эволюционирует и приспосабливается, и если этого рядом нет, стагнация и ...утешение не понятно в чём. на хорошую перспективу, всё внимание собачкам или котикам, рыбкам или свинкам. на плохую, с топорами бегают по ТЦ.
--> Link <--

Ничего из этого набора слов не понял, а из статьи можно сделать вывод, что ТСу надо детский плач включать, потому что он снижает внимание и способствует более активной когнитивной обработке предложенной им самому себе задачи Лишь бы окончательно не рехнулся от этого.

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





Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 24 июля 2018 00:39
· Личное сообщение · #7

не знаю, есть ли среди нас киевляне, но у нас в Киеве (да наверное не в одном только в Киеве!) одно время была популярна такая шутка:
Вопрос: почему на Крещатике нельзя заниматься сексом?
Ответ: будет слишком много советчиков.


Так и здесь: пусть человек делает, что хочет.
Когда закончит (если закончит), посчитает нужным - покажет результаты.
А захочет - не покажет.
Вот тогда и будем говорить, обсуждать. По крайней мере будет предметный разговор.
А пока - о чем все это?
о праве писать софт? Так ведь у нас free country? или нет?

-----
Give me a HANDLE and I will move the Earth.


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


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

Создано: 24 июля 2018 00:54
· Личное сообщение · #8

plutos
У нас говорят не так: "левей, еще левей, теперь вправо, чуть левей, стоп! Вниз. А теперь выходи, скотина, и посмотри что ты натворил!".

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





Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 24 июля 2018 02:27 · Поправил: Bronco
· Личное сообщение · #9

plutos пишет:
Так и здесь: пусть человек делает, что хочет.

чему себя посвятить, конечно это решение ТС.
но эгоизм разумен и оправдан, когда это не кумарит окружающих.
а такая потребность, быть в центре внимания, по поводу и без, уже попахивает инфантильностью.

-----
Чтобы юзер в нэте не делал,его всё равно жалко..





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

Создано: 24 июля 2018 07:04
· Личное сообщение · #10

Уже 3 страница оффтопа пошла. Хватит уже не по теме гонять.

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


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

Создано: 24 июля 2018 18:58 · Поправил: difexacaw
· Личное сообщение · #11

Тут столько написали.. и всё не поделу. Изначально я создал техническую тему что бы что то по этой теме обсудить. А получается если кто то проходит по ссылке, он не замечает тех вещи, а тупо какие то оценки строит по моей активности и подобному. Вы просто потеряли цель.

А два года ушло не только на визор, за это время решались тонны смежных задач. Это не означает что должны быть наработки с нуля, нет конечно. Я за вчера написал кучу кода и основной шаблон. Думаю что то рабочее за неделю получится, что бы как то завести это на апп.

-----
vx




Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 24 июля 2018 20:30
· Личное сообщение · #12

где кодесы то православные? да хоть на коболе какая разница это же индей вы еще заставьте его писать на С#




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

Создано: 24 июля 2018 20:41
· Личное сообщение · #13

Alchemistry

Все кто пользуется нт - исходный её код не видели, а есть только бинарная сборка. Так что откажитесь от нт и перейдите на линь, как то так получается.

-----
vx




Ранг: 145.8 (ветеран), 191thx
Активность: 0.140.36
Статус: Участник

Создано: 24 июля 2018 21:33
· Личное сообщение · #14

difexacaw
истену глаголешь в кой то веки




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

Создано: 25 июля 2018 04:19
· Личное сообщение · #15

difexacaw пишет:
Все кто пользуется нт - исходный её код не видели


толсто. Почти все, кто пользуется линем - "исходный её код не видели" (c)


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