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

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


Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 03 марта 2017 00:47
· Личное сообщение · #1

2 марта 2017 года, была выпущена версия 3.0.5-rc2 дизассемблера Capstone.

Предыдущий релиз был в 2015 году.

Скачать:
www.capstone-engine.org/download.html

Компактный пример на питоне:
Code:
  1. # test1.py
  2. 2 from capstone import *
  3. 3 
  4. 4 CODE = b"\x55\x48\x8b\x05\xb8\x13\x00\x00"
  5. 5 
  6. 6 md = Cs(CS_ARCH_X86, CS_MODE_64)
  7. 7 for i in md.disasm(CODE, 0x1000):
  8. 8     print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))

Запуск и выхлоп:
Code:
  1. $ python test1.py
  2.  
  3. 0x1000: push    rbp
  4. 0x1001: mov rax, qword ptr [rip + 0x13b8]


Описание изменений:
www.capstone-engine.org/changelog.html

Version 3.0.5-rc2

March 2, 2017
Release 3.0.5-RC2 is a release candidate version, with important fixes in the core & several bindings.

Library

Fix build for Visual Studio 2012
Fix X86_REL_ADDR macro
Add CS_VERSION_MAJOR, CS_VERSION_MINOR, CS_VERSION_EXTRA
Better support for embedding Capstone into Windows kernel drivers
Support to embedded Capstone into MacOS kernel
Support MacOS 10.11 and up
Better support for Cygwin
Support build packages for FreeBSD & DragonflyBSD
Add a command-line tool "cstool"
Properly handle switching to Endian mode at run-time for Arm, Arm64, Mips & Sparc

X86

Some random 16-bit code can be handled wrongly.
Remove abundant operand type X86_OP_FP
Fix instructions MOVQ, LOOP, LOOPE, LOOPNE, CALL/JMP rel16, REPNE LODSD, MOV *AX, MOFFS, FAR JMP/CALL
Add X86_REG_EFLAGS for STC and STD
Fix instruction attributes for SYSEXIT, MOVW, ROL, LGS, SLDT
Rename registers ST0-ST7 to be consistent with asm output

Arm

Properly handle IT instruction
Fix LDRSB
Fix writeback for LDR
Fix Thumb BigEndian setup
Fix arith extender
Fix writeback for LDR
Rename enum arm64_mrs_reg to arm64_sysreg

PowerPC

Print 0 offset for memory operand

Sparc

Fix POPC instruction

Python binding

Better PyPy support
Add __version__
Better support for Python 3
Fix CS_SKIPDATA_CALLBACK prototype
Cast skipdata function inside binding to simplify the API

Java binding

Better handle input with invalid code

PowerShell binding

New binding

-----
EnJoy!


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


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

Создано: 29 сентября 2017 01:10 · Поправил: sefkrd
· Личное сообщение · #2

difexacaw пишет:
У дизасма есть две совершенно не связанные задачи. Первая это декодер инструкций, который предоставляет базовую инфу - наличие MRM, SRC/DST операндов, флаги и регистры(IN/OUT) etc. Вторая это текстовый вывод мнемоник. Обычно нужна вторая задача, но для неё подходит вообще любой дизасм, лучше/хуже оценивается по текстовому выхлопу. Для первой задачи важен профайл и гибкость мотора, что он может раскодировать. Есно для первой задачи никакая портабельность смысла не имеет. Для второй задачи смысла не и имеет профайл.

Ну докторская ведь..

Добавлено спустя 25 минут
plutos
Находясь в директории capstone-3.0.5-rc3/ или какой там бранч, просто
Code:
  1. make

а потом
Code:
  1. sudo make install

Code:
  1. sef@seftop:~/Рабочий стол/capstone-3.0.5-rc3$ make
  2.   CC      cs.o
  3.   CC      utils.o
  4.   CC      SStream.o
  5.   CC      MCInstrDesc.o
  6.   CC      MCRegisterInfo.o
  7.   CC      arch/ARM/ARMDisassembler.o
  8.   CC      arch/ARM/ARMInstPrinter.o
  9.   CC      arch/ARM/ARMMapping.o
  10.   CC      arch/ARM/ARMModule.o
  11.   CC      arch/AArch64/AArch64BaseInfo.o
  12.   CC      arch/AArch64/AArch64Disassembler.o
  13.   CC      arch/AArch64/AArch64InstPrinter.o
  14.   CC      arch/AArch64/AArch64Mapping.o
  15.   CC      arch/AArch64/AArch64Module.o
  16.   CC      arch/Mips/MipsDisassembler.o
  17.   CC      arch/Mips/MipsInstPrinter.o
  18.   CC      arch/Mips/MipsMapping.o
  19.   CC      arch/Mips/MipsModule.o
  20.   CC      arch/PowerPC/PPCDisassembler.o
  21.   CC      arch/PowerPC/PPCInstPrinter.o
  22.   CC      arch/PowerPC/PPCMapping.o
  23.   CC      arch/PowerPC/PPCModule.o
  24.   CC      arch/Sparc/SparcDisassembler.o
  25.   CC      arch/Sparc/SparcInstPrinter.o
  26.   CC      arch/Sparc/SparcMapping.o
  27.   CC      arch/Sparc/SparcModule.o
  28.   CC      arch/SystemZ/SystemZDisassembler.o
  29.   CC      arch/SystemZ/SystemZInstPrinter.o
  30.   CC      arch/SystemZ/SystemZMapping.o
  31.   CC      arch/SystemZ/SystemZModule.o
  32.   CC      arch/SystemZ/SystemZMCTargetDesc.o
  33.   CC      arch/X86/X86DisassemblerDecoder.o
  34.   CC      arch/X86/X86Disassembler.o
  35.   CC      arch/X86/X86IntelInstPrinter.o
  36.   CC      arch/X86/X86ATTInstPrinter.o
  37.   CC      arch/X86/X86Mapping.o
  38.   CC      arch/X86/X86Module.o
  39.   CC      arch/XCore/XCoreDisassembler.o
  40.   CC      arch/XCore/XCoreInstPrinter.o
  41.   CC      arch/XCore/XCoreMapping.o
  42.   CC      arch/XCore/XCoreModule.o
  43.   CC      MCInst.o
  44.   LINK    libcapstone.so
  45.   AR      libcapstone.a
  46. ar: создаётся ./libcapstone.a
  47.   GEN     capstone.pc
  48. make[1]: вход в каталог «/home/sef/Рабочий стол/capstone-3.0.5-rc3/cstool»
  49.   CC      cstool_arm64.o
  50.   CC      cstool_sparc.o
  51.   CC      cstool_ppc.o
  52.   CC      cstool_xcore.o
  53.   CC      cstool_arm.o
  54.   CC      cstool.o
  55.   CC      cstool_x86.o
  56.   CC      cstool_systemz.o
  57.   CC      cstool_mips.o
  58.   LINK    cstool
  59. make[1]: выход из каталога «/home/sef/Рабочий стол/capstone-3.0.5-rc3/cstool»
  60. cd tests && make
  61. make[1]: вход в каталог «/home/sef/Рабочий стол/capstone-3.0.5-rc3/tests»
  62.   CC      test_basic.o
  63.   CC      test_detail.o
  64.   CC      test_skipdata.o
  65.   CC      test_iter.o
  66.   CC      test_arm.o
  67.   CC      test_arm64.o
  68.   CC      test_mips.o
  69.   CC      test_ppc.o
  70.   CC      test_sparc.o
  71.   CC      test_systemz.o
  72.   CC      test_x86.o
  73.   CC      test_xcore.o
  74.   LINK    test_basic
  75.   LINK    test_basic.static
  76.   LINK    test_detail
  77.   LINK    test_detail.static
  78.   LINK    test_skipdata
  79.   LINK    test_skipdata.static
  80.   LINK    test_iter
  81.   LINK    test_iter.static
  82.   LINK    test_arm
  83.   LINK    test_arm.static
  84.   LINK    test_arm64
  85.   LINK    test_arm64.static
  86.   LINK    test_mips
  87.   LINK    test_mips.static
  88.   LINK    test_ppc
  89.   LINK    test_ppc.static
  90.   LINK    test_sparc
  91.   LINK    test_sparc.static
  92.   LINK    test_systemz
  93.   LINK    test_systemz.static
  94.   LINK    test_x86
  95.   LINK    test_x86.static
  96.   LINK    test_xcore
  97.   LINK    test_xcore.static
  98. make[1]: выход из каталога «/home/sef/Рабочий стол/capstone-3.0.5-rc3/tests»
  99. install -m0755 ./libcapstone.so ./tests/
  100. cd ./tests/ && mv libcapstone.so libcapstone.so.3 && ln -s libcapstone.so.3 libcapstone.so
  101. sef@seftop:~/Рабочий стол/capstone-3.0.5-rc3$ sudo make install
  102. [sudo] пароль для sef: 
  103. mkdir -/usr/lib
  104. install -m0755 ./libcapstone.so /usr/lib
  105. cd /usr/lib && mv libcapstone.so libcapstone.so.3 && ln -s libcapstone.so.3 libcapstone.so
  106. install -m0644 ./libcapstone./usr/lib
  107. mkdir -/usr/include/capstone
  108. install -m0644 include/*./usr/include/capstone
  109. mkdir -/usr/lib/pkgconfig
  110. install -m0644 ./capstone.pc /usr/lib/pkgconfig/
  111. mkdir -/usr/bin
  112. install -m0755 cstool/cstool /usr/bin
  113. sef@seftop:~/Рабочий стол/capstone-3.0.5-rc3$ 


Добавлено спустя 37 минут
plutos пишет:
куда устанавливается Capstone?

В моем выхлопе видно..
Чё не так: свой листинг сюда..
Debian 9 (Stable)

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


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

Создано: 30 сентября 2017 01:44
· Личное сообщение · #3

Уважаемый sefkrd!
Большое спасибо за помощь! Кажется все получилось!
Ну и еще, так на всякий случай, спрошу: какой ну уже самый верный способ проверить все ли работает так как нужно?
Я на всякий случай сделал sudo ./tests/test* => вижу перечень платформ, code and disasm.
Значит все робит?

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





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

Создано: 30 сентября 2017 22:02 · Поправил: sefkrd
· Личное сообщение · #4

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

В терминале: cstool x64 769490903457

plutos пишет:
Значит все робит?

Ага..




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

Создано: 30 сентября 2017 23:34 · Поправил: plutos
· Личное сообщение · #5

sefkrd пишет:
Значит все робит? Ага..


Да нет, блин, что-то не так...

cstool: Command not found.


Боюсь, что у меня какие-то нелады с PATH environmental variable, или как оно на FreeBSD называется.
К примеру:

COMPILE.TXT:

NOTE: The core framework installed by "./make.sh install" consist of
following files:


/usr/include/capstone/capstone.h
У меня:
/usr/local/include/capstone/capstone.h

/usr/include/capstone/x86.h
У меня:
/usr/local/include/capstone/x86.h

Ну и так далее, все остальные в /usr/local/include/capstone
/usr/include/capstone/arm.h
/usr/include/capstone/arm64.h
/usr/include/capstone/mips.h
/usr/include/capstone/ppc.h
/usr/include/capstone/sparc.h
/usr/include/capstone/systemz.h
/usr/include/capstone/xcore.h
/usr/include/capstone/platform.h


/usr/lib/libcapstone.so (for Linux/*nix)
У меня:
/usr/local/lib/libcapstone.so

/usr/lib/libcapstone.a
У меня:
/usr/local/lib/libcapstone.a

Из-за этого и make не может найти библиотеку capstone

LIBNAME = capstone

test1: test1.o
${CC} $< -O3 -Wall -l$(LIBNAME) -o $@

Так что делать в таком случае?
Reinstall, с указанием каких-то специфических options and locations или просто тупо перенести все файлы в /usr/include/capstone? Но это может еще более запутать и без того запутаную ситуацию.

Спасибо за помощь и терпение!

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





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

Создано: 01 октября 2017 00:09 · Поправил: sefkrd
· Личное сообщение · #6

ldconfig..
Железяку в reboot, если неделями работает..
/usr/local/bin/cstool че покажет?
plutos пишет:
просто тупо перенести все файлы

Симлинки попробуй из /usr/local/ в /usr (sudo ln -s)

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


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

Создано: 01 октября 2017 03:05
· Личное сообщение · #7

sefkrd пишет:
В терминале: cstool x64 769490903457



root@plutos: ~/../capstone3.0.5-rc3/cstool # ./cstool x64 799490903457 => результат точно совпадает с вашим на картинки.

Но если покинуть этот гостепреимный folder, то cstool не найден.
В /usr/local/bin/cstool этого стула нет!

Видимо что-то с путями не так. Буду копать.
Спасибо за помощь!

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





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

Создано: 18 октября 2017 09:53 · Поправил: Bronco
· Личное сообщение · #8

По Юникорну темы пока нет, а автор тот же, попробую сюда.
Хз как его дебажить, в сорцах только хидеры и статические либы.
Проблема в том что не могу понять, как он мапит инстр с указателями на память, где базовый регистр RIP.
Code:
  1. LEA R9, [RIP - 0x32D4262]
  2.    instruction->size : 0x07 byte
  3.    CS_AC_WRITE ( 2 )
  4.    x86->operands[0].type: X86_OP_REG
  5.    x86->operands[0].reg : X86_REG_R9
  6.    x86->operands[0].size: 0x08 byte
  7.    CS_AC_READ  ( 1 )
  8.    x86->operands[1].type: X86_OP_MEM 
  9.    x86->operands[1].size: 0x08 byte
  10.    x86->operands[1].mem.base: X86_REG_RIP
  11.    x86->operands[1].mem.disp: 0x32D4262

раскодированный указатель равен "0x146FEA1CA",юникорн мне возвращает в R9 = 0x00000001414acda5
add
RIP = R9 + x86->operands[1].mem.disp - instruction->size// 0x144781000 (база раздела)
получается что при мапинге дисплейшен не пересчитывают.
а скорее всего борода здесь
uc_mem_write(uc_engine *uc, uint64_t address, const void *bytes, size_t size);
можно пересчитать disp в структуре капстона, можно переписать opstr инструкции, но байткод инстр в структуре от этого не меняется.

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


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


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

Создано: 24 октября 2017 02:59 · Поправил: plutos
· Личное сообщение · #9

Пытаюсь на cygwin64 собрать пример, приведенный здесь: http://www.capstone-engine.org/lang_c.html.
Capstone установлен успешно, все библиотеки и capstone.h на своих местах.
Когда я run "make" on commandline:
то после строчки из makefile
cc test1.o -O3 -Wall -lcapstone -o test1

вылетает с ошибкой:

/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../lib/capstone.lib(cs.o):cs.c:.text+0x1): undefined reference to `__ms_vsnprintf'
/usr/lib/gcc/x86_64-pc-cygwin/4.9.3/../../../../lib/capstone.lib(cs.o):cs.c:.text+0x1): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `__ms_vsnprintf'
collect2: error: ld returned 1 exit status
Makefile:6: recipe for target 'test1' failed
make: *** [test1] Error 1

Помогите, кто может!

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





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

Создано: 24 октября 2017 07:06
· Личное сообщение · #10

plutos пишет:
вылетает с ошибкой:

хз. первое что на ум приходит форматирование для данных некорректное.

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




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

Создано: 24 октября 2017 10:04
· Личное сообщение · #11

plutos пишет: undefined reference to `__ms_vsnprintf'

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

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


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

Создано: 24 октября 2017 19:34 · Поправил: sefkrd
· Личное сообщение · #12

shellstorm
Согласен - кросс-компиляция..

plutos
Из COMPILE.TXT:

(6) Compile on Windows with Cygwin

To compile under Cygwin gcc-mingw-w64-i686 or x86_64-w64-mingw32 run:

- To compile Windows 32-bit binary under Cygwin, run:

$ ./make.sh cygwin-mingw32

- To compile Windows 64-bit binary under Cygwin, run:

$ ./make.sh cygwin-mingw64

Resulted files libcapstone.dll, libcapstone.dll.a & tests/test*.exe can then
be used on Windows machine.

Удачи!

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


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

Создано: 24 октября 2017 23:06 · Поправил: plutos
· Личное сообщение · #13

shellstorm пишет:
Ищет msvcrt которой нет в никсах, поэтому либо в статике линкуйте проект или явно указывайте опцией платформу под которую собираете.


Спасибо за ответы!
Я в вопросах кросс-компиляции сильно плаваю, точнее, больше тону...
Возможно ли дать развернутый пример, а еще лучше подправленый makefile?

sefkrd пишет:
- To compile Windows 32-bit binary under Cygwin, run: $ ./make.sh cygwin-mingw32
- To compile Windows 64-bit binary under Cygwin, run: $ ./make.sh cygwin-mingw64


Все вроде бы так и делал, а результат - сами видите.

Алтернативный вариант:
Забудем на минуту про cygwin64.
Я собрал capstone на Visual Studio 2015 без проблем. Все libraries and header на месте.
Помогите сообразить пример makefile для данного случая (тот же source file). Т.е. как собрать этот же test.c под Windows.
У меня заклинило и не работает ничего!!!

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




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

Создано: 25 октября 2017 10:55
· Личное сообщение · #14

sefkrd пишет: make.sh cygwin-mingw32

make.sh gcc решает, без проблем собирается в win\nix или явно указать nix

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


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

Создано: 28 октября 2017 01:54
· Личное сообщение · #15

что бы не оставлять вопрос открытым (может кому-нибудь и пригодится):

при сборке использовать
./make.sh gcc

как и советовал shellstorm.

После этого пример собирается без ошибок.

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


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


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

Создано: 28 октября 2017 19:33
· Личное сообщение · #16

Как всегда - тесты на профайл в студию.

-----
vx





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

Создано: 16 февраля 2018 17:32
· Личное сообщение · #17

при дизасме выделенного кода под дбгх64, в инструкциях с "mem.base == X86_REG_RIP", отрицательный дисплейшен. Умножить на -1, не проблема, непонятно что я не так делаю.
Code:
  1. count = cs_disasm(handle, (const uint8_t*)selectbin, (size_t)code_size, (int64_t)addr_start, (size_t)0, &insn);

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

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





Ранг: 337.6 (мудрец), 224thx
Активность: 0.210.1
Статус: Участник
born to be evil

Создано: 16 февраля 2018 17:34 · Поправил: ajax
· Личное сообщение · #18

Bronco
вводить свою проверку инструкции на границу страницы (?) техника клерка

-----
От многой мудрости много скорби, и умножающий знание умножает печаль




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 16 февраля 2018 17:47
· Личное сообщение · #19

Bronco пишет:
при наличии инструкции, которая "ломает" листинг, дизасм только до неё. как обходить не валидные опкоды?

eip+1, не?




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

Создано: 16 февраля 2018 17:49 · Поправил: Bronco
· Личное сообщение · #20

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

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





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

Создано: 16 февраля 2018 18:44 · Поправил: difexacaw
· Личное сообщение · #21

ajax

Не на границу страницы, на границах проц вычислял размер инструкции.

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

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

-----
vx





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

Создано: 16 февраля 2018 23:42
· Личное сообщение · #22

Чё вы все гадаете, двигло открыто.. Бери - читай..




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

Создано: 25 февраля 2018 10:40 · Поправил: Vamit
· Личное сообщение · #23

Баги Capstone на операндах типа X86_OP_IMM, думаю для х64 будет аналогично

ГУИ dbg:
инструкция: 00FCEC83 | 66 0F BA FB E7 | btc bx,E7 |

полный выхлоп Capstone:
id:52 name:btc addr:00FCEC83 len:5
dump:66,0f,ba,fb,e7 prefix:00,00,66,00 opcode:0f,ba,00,00
mnem:btc params:bx, -0x19 groups:none
rex:00 modrm:fb sib:00 size=4 xopcc:0 ssecc:0 avxcc:0 avxsae:false avxrm:0
operands:2
1 - reg:8.bx size:2 avxbc:0 avxzom:false
2 - imm:FFFFFFE7 size:2 avxbc:0 avxzom:false
!!!ошибка на размере 2го операнда, в итоге берется его значение FFE7 вместо требуемого E7

для сравнения выхлоп Zydis:
btc bx, 0xE7
size: 5, id: 55, opcount: 3
operand 1 (size: 16, access: read+write, visibility: explicit) "bx", register: bx
operand 2 (size: 8, access: read, visibility: explicit) "0xE7", immediate: 0x000000E7
operand 3 (size: 32, access: write, visibility: hidden) "eflags", register: eflags

Как бороться с такими глюками Capstone, они на всех imm операндах - его размер выдается по размеру данных инструкции и расширяется со знаком, в этом примере override size = 2 (word).
Для инструкции btc еbx, ... второй операнд будет FFFFFFE7
Такие глюки на всех битовых инструкциях, инструкциях сдвига и возможно на других...

-----
Everything is relative...





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

Создано: 25 февраля 2018 10:53 · Поправил: Bronco
· Личное сообщение · #24

Vamit пишет:
Как бороться с такими глюками Capstone

значит не мне одному такое.
я при дизе в список правлю строковые данные для имм, просто число со знаком
и дисплейшен при мембэйс == рип+ в структуре капстона для инструкуции.
об этом?

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





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

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

Bronco

Чем это лучше чем ксед ?
По профайлу диза лучший, немного медленнее ксед. Учитывая что ксед табличный декодер, то остальное всё deprecated и унылое говно прямо сказать. Зачем оно нужно ?

-----
vx





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

Создано: 25 февраля 2018 11:37
· Личное сообщение · #26

Для меня вывод в строку на втором месте, т.к. данные в первую очередь нужны для статического эмулятора инструкций, а для него E7 и FFE7 совсем не одно и то же.
Пока вижу выход сделать таблицу всех битовых инструкций и инструкций сдвига с операндом imm8, а все остальные инструкции будут работать правильно, т.к. имеют sign-extended до размера данных imm операнд.
В принципе получится небольшая таблица на 14 инструкций (bt, btc, btr, bts, rcl, rcr, rol, ror, sal, sar, shl, shr, shld и shrd).

-----
Everything is relative...





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

Создано: 25 февраля 2018 11:40 · Поправил: Bronco
· Личное сообщение · #27

difexacaw, в сдк есть только капстон, + либа капстона в снапе лежит.
думаешь надо тянуть диз кседа за собой?
по кседу у меня вопрос по асм двигу, если таковой есть заливай, буду пробовать, ибо титан с бриджем уже достали, а либа кседпарсе непонятно что, по апи там только валидность чекают.
Vamit пишет:
FFE7 совсем не одно и то же.

согласен, но борода кажется из-за типа данных в структуре , тут по ходу всё расширяют до х64, не зависимо от размера первого операнда.

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





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

Создано: 25 февраля 2018 11:43 · Поправил: difexacaw
· Личное сообщение · #28

Vamit

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

> Пока вижу выход сделать таблицу всех битовых инструкций

Набор столь толстый и не логичный, что реализация с нуля бессмысленна. Даже если вы потратите кучу времени, оно будет работать не корректно - глючить и бажить. Для полноценной реализации вам придётся досконально изучить всю архитектуру. Это не реальная задача и её может решить только автор(производитель) архитектуры. Для стандартной раскодировки в визоре я использовал деза, как лучший по профайлу. Когда требовалось декодировать расширенные наборы я использовал ксед. Никакой другой диз не пригоден - они либо тормозные, либо не полноценные, либо анстаб.

-----
vx





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

Создано: 25 февраля 2018 11:54 · Поправил: Vamit
· Личное сообщение · #29

Bronco пишет:
в сдк есть только капстон

Не правда, там есть и Zydis и он выводит инфу в окно дизасма. И Zydis постоянно обновляется, последнее было 3 дня назад, а Capstone уже почти год как не обновлялся.

Добавлено спустя 3 минуты
Bronco пишет:
тут по ходу всё расширяют до х64, не зависимо от размера первого операнда

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

-----
Everything is relative...





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

Создано: 25 февраля 2018 11:58
· Личное сообщение · #30

Vamit

Тут есть моя тема про выбор лучшего дизасма, почитайте.

-----
vx





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

Создано: 25 февраля 2018 12:11 · Поправил: Vamit
· Личное сообщение · #31

А вот ещё один глюк:
00FCEC83 | 6A A7 | push FFFFFFA7
формат инструкции push imm8
На ней уже врут оба дизасма и Capstone и Zydis. Хотя тут Zydis прав, т.к. размер операнда выставил в byte, но вывод в ГУИ неверный.

Добавлено спустя 2 минуты
difexacaw пишет:
Тут есть моя тема про выбор лучшего дизасма

Без ссылки на тему это ни о чем.

-----
Everything is relative...



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


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