eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: forever_ (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Софт, инструменты —› Unicorn - The ultimate CPU emulator
<< . 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение


Ранг: 657.3 (! !)
Статус: Участник
CyberMonk

Создано: 19 октября 2017 13:52 · Поправил: mak New!
Цитата · Личное сообщение · #1



Unicorn is a lightweight, multi-platform, multi-architecture CPU emulator framework based on QEMU.

Unicorn offers some unparalleled features:

Multi-architecture: ARM, ARM64 (ARMv8), M68K, MIPS, SPARC, and X86 (16, 32, 64-bit)
Clean/simple/lightweight/intuitive architecture-neutral API
Implemented in pure C language, with bindings for Crystal, Clojure, Visual Basic, Perl, Rust, Ruby, Python, Java, .NET, Go, Delphi/Free Pascal, Haskell and Pharo.
Native support for Windows & *nix (with Mac OSX, Linux, *BSD & Solaris confirmed)
High performance via Just-In-Time compilation
Support for fine-grained instrumentation at various levels
Thread-safety by design
Distributed under free software license GPLv2


Последний мастер - --> Link <--
Последний релиз Version 1.0.2-rc1 - --> Link <--

Сборка - следуем указанию в --> Link <--

Code:
  1.  MINGW64 /n
  2. $ cd msys64/unicorn
  3.  
  4. @PC MINGW64 /n/msys64/unicorn
  5. $ ./make.sh cross-win64
  6. cd qemu && \
  7. ./configure --cc="x86_64-w64-mingw32-gcc" --extra-cflags="-DUNICORN_HAS_X86 -DUNICORN_HAS_ARM -DUNICORN_HAS_M68K -DUNICORN_HAS_ARM64 -DUNICORN_HAS_MIPS -DUNICORN_HAS_MIPSEL -DUNICORN_HAS_MIPS64 -DUNICORN_HAS_MIPS64EL -DUNICORN_HAS_SPARC " --target-list="x86_64-softmmu, arm-softmmu, m68k-softmmu, aarch64-softmmu, mips-softmmu, mipsel-softmmu, mips64-softmmu, mips64el-softmmu, sparc-softmmu,sparc64-softmmu," --disable-stack-protector

*Если MINGW64 Портабельный то здесь нужно указать полный путь с названием диска $ cd c:/msys64/unicorn

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



Ранг: 228.1 (наставник)
Статус: Участник

Создано: 26 июля 2018 15:20 New!
Цитата · Личное сообщение · #2

Bronco пишет:
что может поломать VS2015 или VS2017?

И с /Od то же самое?


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 26 июля 2018 21:37 New!
Цитата · Личное сообщение · #3

f13nd пишет:
И с /Od то же самое?

как то с ходу, не вкуриваю, что такое "/Od"


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 26 июля 2018 21:54 · Поправил: f13nd New!
Цитата · Личное сообщение · #4

Bronco
С/C++ - Optimization - Disabled. Если вдруг в флагах путаться начинает, наверное оно. Что-то было такое, от чего я окончательно на студию забил использую только 2005ю теперь, только с этой опцией и то, чтоб потом в другой компилер перенести, а там только отлаживать.


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 26 июля 2018 22:50 New!
Цитата · Личное сообщение · #5

f13nd пишет:
С/C++ - Optimization - Disabled

ок...в настройках отключена. включаем?


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 26 июля 2018 22:56 New!
Цитата · Личное сообщение · #6

Bronco пишет:
в настройках отключена. включаем?

Если она уже отключена, то лучше точно не станет Бери 2013ю, меньше времени потеряешь тогда.


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 27 июля 2018 06:15 · Поправил: Bronco New!
Цитата · Личное сообщение · #7

f13nd пишет:
Если она уже отключена

сорян, это в дебаг режиме было отключено.
с релиз режимом фаберже те же..
после 15й у меня 2013 не станет, только на варю, а это уже большая возня.
и по сборке в 2013 у меня нет уверенности, что там таких качелей не будет.
=======
/ADD
собирал в mingw( с этими путями к питону, мозг сука высушил), ебала с флагами та же самая.
с мастер-сорцов ничего толкового не соберёшь, наглухо убитые апдейтами. и по ходу дело не в студии.
в mingw с релизных сорцов 1.01, всё как и надо, где яшечка? давай споём..
как бы намутить солюшен для релиз_сорца?


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 27 июля 2018 14:55 New!
Цитата · Личное сообщение · #8

Bronco пишет:
наглухо убитые апдейтами. и по ходу дело не в студии

Если апдейты никуда не впились, рипнул бы... что-нибудь, что еще работало, да напилингом-паялингом довел до ума.


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 27 июля 2018 16:50 New!
Цитата · Личное сообщение · #9

f13nd пишет:
Если апдейты никуда не впились

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

Ранг: 0.0 (гость)
Статус: Участник

Создано: 27 июля 2018 18:10 New!
Цитата · Личное сообщение · #10

f13nd пишет: да напилингом-паялингом довел до ума.

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


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 27 июля 2018 18:12 New!
Цитата · Личное сообщение · #11

shellstorm пишет:
в qemu активно используются расширения компилятора и специфические макросы

А я и говорю, содрать рабочий выхлоп, а не исходник со всеми этими специфичными макросами (какие в си могут быть сложные макросы? Оо). Бегло посмотрел эту длл, очень даже рипабельная.

Ранг: 0.0 (гость)
Статус: Участник

Создано: 27 июля 2018 18:27 New!
Цитата · Личное сообщение · #12

f13nd пишет: какие в си могут быть сложные макросы?

которые относятся к compiler extension, в частности нужно фиксить case ranges, aling, в GCC очень много специфических макросов, которые не затачиваются на стандарте.


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 27 июля 2018 18:49 New!
Цитата · Личное сообщение · #13

shellstorm пишет
Опенсурс. Бессмысленный и беспощадный.


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 28 июля 2018 08:51 New!
Цитата · Личное сообщение · #14

f13nd пишет:
Опенсурс. Бессмысленный и беспощадный.

ага...инклудов всего ничего, экспорта то же, и как бы под студией такую матрёшку не по дебажишь с наскоку.
выше уже писал, что код делится на базовые блоки. это стандарт. посмотрел на доступную инфо, при хуке на блок. дают начало блока и размер блока. вершины блока определяют правильно.
но после брэнч логика кода такова.
Code:
  1. if (HOOK_EXISTS_BOUNDED(env->uc, UC_HOOK_CODE, pc_start)) 
  2.          {
  3.         if (s->last_cc_op != s->cc_op) 
  4.                  {
  5.             sync_eflags(s, tcg_ctx);
  6.             s->last_cc_op = s->cc_op;
  7.             changed_cc_op = true;
  8.         }
  9.         gen_uc_tracecode(tcg_ctx, 0xf1f1f1f1, UC_HOOK_CODE_IDX, env->uc, pc_start);
  10.         // the callback might want to stop emulation immediately
  11.         check_exit_request(tcg_ctx);
  12.     }

хз если ласт это вершина, то почему то должна быть не равна.


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 28 июля 2018 14:41 · Поправил: f13nd New!
Цитата · Личное сообщение · #15

Bronco
sync_eflags() если я правильно понял это только рассчет значения ефлагс через helper_compute_all (видимо чтоб считать их только для инструкций, влияющих на бранч), если тебе не нравится частый синхрон, хз куда уж реже. Там нету ни одного вызова с импорта, просто сама по себе функция широка и обильна и наряду в ней нет. gen_uc_tracecode() уже с импортом, с критическими секциями и Sleep'ами. Наверное главные затупы там.

ЗЫ: отлаживать можно и не в студии, легко и непринужденно ставить бряки куда надо помогает MessageBeep. И if () MessageBeep(0);
ЗЗЫ: и если я вообще правильно все понял (такое бывает нечасто), то эту штуку нельзя к эмуляторам отнести. Ее вообще стоило бы отнести кое-куда и там оставить

Добавлено спустя 2 часа 31 минуту
Code:
  1. .text:6B949ABA                 mov     ebx, ds:__imp__Sleep@4
  2. .text:6B949AC0 loc_6B949AC0:
  3. .text:6B949AC0                 mov     dword ptr [esp], 1 ; dwMilliseconds
  4. .text:6B949AC7                 call    ebx ; __imp__Sleep@4
  5. .text:6B949AC9                 mov     eax, dword ptr ds:unk_6BAE1E68
  6. .text:6B949ACE                 sub     esp, 4
  7. .text:6B949AD1                 cmp     eax, 1
  8. .text:6B949AD4                 jz      short loc_6B949AC0
Это какое-то новое слово в синхронизации потоков? Может я идиот и не знаю просто.


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 29 июля 2018 00:06 New!
Цитата · Личное сообщение · #16

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

упс...всё не так...))
получается , что для пользователя, при "UC_HOOK_CODE", его ваще нет. даже на бранчах.
в контексте рога состояние рфлагс , какое то остаточное, и не совпадает с текущим. хотя код исполняется правильно. я добавил покрытие для коротких прыгов, но получается шляпа.


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 29 июля 2018 00:17 · Поправил: f13nd New!
Цитата · Личное сообщение · #17

Bronco
Ну значит и нечего там ушивать. Если разработчик сам уже запутался в своей писанине, остается либо ждать когда разберется либо взять релиз и не выёживаться. либо индейца с визором ждать


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 29 июля 2018 00:25 New!
Цитата · Личное сообщение · #18

f13nd пишет:
либо взять релиз и не выёживаться

так это с релизом
с мастера другие качели..

Ранг: 0.0 (гость)
Статус: Участник

Создано: 29 июля 2018 00:34 · Поправил: shellstorm New!
Цитата · Личное сообщение · #19

Bronco пишет: так это с релизом

самому лень смотреть, глянь в релизе, translate.c поиск:
закомментирована эта строка или нет
if (num_insns + 1 == max_insns && (tb->cflags & CF_LAST_IO))

Bronco пишет: но это же для одного флага

это был достаточно серье.зный патч, интересно найти проблему, где сломали код


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 29 июля 2018 00:38 New!
Цитата · Личное сообщение · #20

shellstorm пишет:
закомментирована эта строка или нет

угу..под коментами. но это же для одного флага - CF_LAST_IO


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 29 июля 2018 06:12 New!
Цитата · Личное сообщение · #21

Погорячился с выводами про ефлагс, считает он их в обработчике каждой инструкции. Линканутая выше конструкция просто вызывает зарегистрированные UC_HOOK_CODE, хз зачем она такая умная. Без нагрузки в хуках рса1024 (около 4млн чтоли инструкций, экспонента публичная) считает мгновенно и даже каким-то чудом правильно.


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 29 июля 2018 06:59 · Поправил: Bronco New!
Цитата · Личное сообщение · #22

f13nd пишет:
хз зачем она такая умная

угу..ну так метод НС никто не отменял.
бранч это завершение блока, на вершинах синхронизация рфлагс, и в конструкторе функции всё в порядке.
только это синхрон для "внутреннего потребления", надо лезть в экспорт, там где рег_реад. почему там нет синхронизации.
//ADD 1
млять..любопытно же, что на самом деле.
дбг в дбг, и давай ловить мошеника.
нифуя не по вершинам блока, синхрон с рфлагс на всех инстр где REG WRITE: X86_REG_RFLAGS
что очень даже правильно.
//ADD 2
рег_рид читает весь банч, для ефлагс свой кейс:
Code:
  1. case UC_X86_REG_EFLAGS:
  2. *(int32_t *)value = cpu_compute_eflags(&X86_CPU(uc, mycpu)->env);
  3. break;

это толпой патчили на гите, автор учёл, но оно нифуя не работает:
Code:
  1. static inline uint32_t cpu_compute_eflags(CPUX86State *env)
  2. {
  3.     return (env->eflags0 & ~(CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C | DF_MASK)) | cpu_cc_compute_all(env, CC_OP) | (env->df & DF_MASK);
  4. }

в итоге тупо возвращают с чем пришли:
Code:
  1. target_ulong helper_cc_compute_all(target_ulong dst, target_ulong src1,  target_ulong src2, int op)
  2. {
  3.     switch (op) 
  4. {
  5.     default: /* should never happen */
  6.         return 0;
  7.  
  8.     case CC_OP_EFLAGS:
  9.         return src1;

что то тут синхронизации не видно..
//ADD 3
да ну нах такие качели, так и моск высохнет,
код рог правильно исполняет, но ипись с этим синхроном, покрытие можно по другому сделать.
как бы баян этот для себя прикрыл, но кто чего нароет_починит, велком.

Ранг: 0.0 (гость)
Статус: Участник

Создано: 29 июля 2018 17:28 New!
Цитата · Личное сообщение · #23

хэлперы дифал, там нет ничего интересного, что в старой, что в новой версии, разница '\n' - '\n\r'.


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 29 июля 2018 19:17 · Поправил: Bronco New!
Цитата · Личное сообщение · #24

shellstorm пишет:
там нет ничего интересного

не прав, сам поток как раз там синхронизирут.
рассчет значения ефлагс через helper_compute_all (видимо чтоб считать их только для инструкций, влияющих на бранч)
--> Link <--
а вот фейсы лагают, ибо у них свой метод из хелпера. из - за этого же качели по операторам флага.

Ранг: 0.0 (гость)
Статус: Участник

Создано: 29 июля 2018 19:34 New!
Цитата · Личное сообщение · #25

Bronco пишет: не прав, сам поток как раз там синхронизирут.

я не о синхронизации, а о разнице в работе между старой и новой версией.


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 29 июля 2018 19:44 · Поправил: f13nd New!
Цитата · Личное сообщение · #26

Bronco пишет:
надо лезть в экспорт, там где рег_реад

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


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 29 июля 2018 20:10 · Поправил: Bronco New!
Цитата · Личное сообщение · #27

f13nd, синхрон для эмуляции потока, нах его под нопы?
либо улетим в ебеня, либо полонез агинского..
чтобы оттуда доставать, надо в структуры вникать, и не под отладчиком дебажить.
а к студии подключать_настраивать целое дело.
по регистрам, через фейсы, вывод инфо нормальный, они то же нужны.
в апи без синхрона только ефлагс.


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 29 июля 2018 20:40 · Поправил: f13nd New!
Цитата · Личное сообщение · #28

Bronco пишет:
синхрон для эмуляции потока, нах его под нопы?

То есть без хуков UC_HOOK_CODE происходит не эмуляция, а полонез агинского? Если это такой костыль на куему, который улетает куда попало, зачем этот костыль именно под обработчик хука просовывать?


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 29 июля 2018 21:16 New!
Цитата · Личное сообщение · #29

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


Ранг: 228.1 (наставник)
Статус: Участник

Создано: 29 июля 2018 21:24 · Поправил: f13nd New!
Цитата · Личное сообщение · #30

Bronco пишет:
с хуками полный порядок, их ваще дофига разных

Я не о том, что их дофига разных. Раз под хуком, значит утилитарная хрень для хука, куему дружить с лошадиным контекстом. Ну хрен с ним, с лошадём вобщем.


Ранг: 274.3 (наставник)
Статус: Участник
Advisor

Создано: 28 августа 2019 05:37 New!
Цитата · Личное сообщение · #31

вот млять, в сабже нет регистра XCR0 (extended control register & XFEATURE_ENABLED_MASK), в итоге заегорился на исполнении инструкции "XGETBV". и хз как это эмулить, получать то не от куда. засада.
<< . 1 . 2 . 3 . 4 . >>
 eXeL@B —› Софт, инструменты —› Unicorn - The ultimate CPU emulator

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS