Сейчас на форуме: bartolomeo, -Sanchez-, morgot, sashalogout (+5 невидимых)

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


Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 19 октября 2017 13:52 · Поправил: mak
· Личное сообщение · #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-rc4 (30.06.2020) - --> Link <--

Code:
  1. Version 1.0.2-rc4
  2.  
  3. This version fixes some issues and improves over v1.0.2-rc3.
  4.  
  5. No longer require Python to build
  6. Fix recursive UC_HOOK_MEM callbacks for cross pages access
  7. Remove UC_ERR_TIMEOUT, so timeout on uc_emu_start() is not considered error
  8. Added UC_QUERY_TIMEOUT to query exit reason
  9. Fix UAF when deleting hook while in hook callback
  10. Ensure that hooks are unaffected by a request to stop emulation.
  11. Fix block hooks being called twice after an early exit from execution.
  12. Fix binding install on python2 (MacOS)
  13. X86:
  14. Support read/write STn registers
  15. Support read/write X64 base regs
  16. ARM64:
  17. Support some new registers


Сборка - следуем указанию в --> 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

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube


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


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

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

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

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

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





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

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

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

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

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





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

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

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

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





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

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

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

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

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





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

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

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

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

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





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

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

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

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

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





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

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

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

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

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





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

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

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

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

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




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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

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




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

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

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

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

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




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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

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




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

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

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

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





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

Создано: 28 июля 2018 08:51
· Личное сообщение · #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.     }

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

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





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

Создано: 28 июля 2018 14:41 · Поправил: f13nd
· Личное сообщение · #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
Это какое-то новое слово в синхронизации потоков? Может я идиот и не знаю просто.

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





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

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

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

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

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





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

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

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

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





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

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

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

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

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




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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

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

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

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




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

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

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

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

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





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

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

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

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





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

Создано: 29 июля 2018 06:59 · Поправил: Bronco
· Личное сообщение · #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.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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




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

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

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

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

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




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

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

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

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




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

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

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

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

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





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

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

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

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





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

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

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

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

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





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

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

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

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





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

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

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

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

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





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

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

вот млять, в сабже нет регистра XCR0 (extended control register & XFEATURE_ENABLED_MASK), в итоге заегорился на исполнении инструкции "XGETBV". и хз как это эмулить, получать то не от куда. засада.

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



<< . 1 . 2 . 3 . 4 . 5 . >>
 eXeL@B —› Софт, инструменты —› Unicorn - The ultimate CPU emulator
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати