JonathanSalwan / Triton

Triton is a dynamic binary analysis library. Build your own program analysis tools, automate your reverse engineering, perform software verification or just emulate code.
https://triton-library.github.io
Apache License 2.0
3.4k stars 524 forks source link

x8664Cpu::disassembly(): Invalid operand #1205

Closed fr0g2s closed 1 year ago

fr0g2s commented 1 year ago

build Triton

fr0g2s@LGgram14:~/src/Triton/build$ cmake ..
-- The C compiler identification is GNU 9.4.0
-- The CXX compiler identification is GNU 9.4.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Compiling with Python bindings
-- Found PythonInterp: /usr/bin/python3 (found suitable version "3.8.10", minimum required is "3.6")
-- Found PythonLibs: /usr/lib/x86_64-linux-gnu/libpython3.8.so (found suitable version "3.8.10", minimum required is "3.6")
-- Compiling with Z3 SMT solver
-- Found Z3 include directory: /usr/include
-- Found Z3 library: /usr/lib/x86_64-linux-gnu/libz3.so
-- Z3 version: 4.8.7.0
-- Compiling with Capstone
-- Found CAPSTONE include directory: /usr/include
-- Found CAPSTONE library: /usr/lib/x86_64-linux-gnu/libcapstone.so
-- CAPSTONE version: 4.0.2
-- Compiling with Boost headers
-- Found Boost: /usr/lib/x86_64-linux-gnu/cmake/Boost-1.71.0/BoostConfig.cmake (found suitable version "1.71.0", minimum required is "1.55.0")
-- Configuring done
-- Generating done
-- Build files have been written to: /home/fr0g2s/src/Triton/build
fr0g2s@LGgram14:~/src/Triton/build$ make -j3
[  1%] Building CXX object src/libtriton/CMakeFiles/triton.dir/arch/arm/aarch64/aarch64Cpu.cpp.o
[  2%] Building CXX object src/libtriton/CMakeFiles/triton.dir/arch/arm/aarch64/aarch64Semantics.cpp.o
[  3%] Building CXX object src/libtriton/CMakeFiles/triton.dir/arch/architecture.cpp.o
...
[ 97%] Building CXX object src/examples/cpp/CMakeFiles/block.dir/block.cpp.o
[ 98%] Linking CXX executable constraint
[ 99%] Linking CXX executable ctest_api
[ 99%] Built target constraint
[ 99%] Built target ctest_api
[100%] Linking CXX executable block
[100%] Built target block
fr0g2s@LGgram14:~/src/Triton/build$ sudo make install
Consolidate compiler generated dependencies of target triton
[ 87%] Built target triton
[ 87%] Built target python-triton
Consolidate compiler generated dependencies of target taint_reg
[ 89%] Built target taint_reg
Consolidate compiler generated dependencies of target info_reg
[ 91%] Built target info_reg
Consolidate compiler generated dependencies of target ir
[ 93%] Built target ir
Consolidate compiler generated dependencies of target simplification
[ 95%] Built target simplification
Consolidate compiler generated dependencies of target constraint
[ 97%] Built target constraint
Consolidate compiler generated dependencies of target ctest_api
[ 99%] Built target ctest_api
Consolidate compiler generated dependencies of target block
[100%] Built target block
Install the project...
-- Install configuration: ""
-- Installing: /usr/local/lib/cmake/triton/tritonTargets.cmake
-- Installing: /usr/local/lib/libtriton.so
-- Up-to-date: /usr/local/include/triton/aarch64.spec
-- Up-to-date: /usr/local/include/triton/aarch64Cpu.hpp
-- Up-to-date: /usr/local/include/triton/aarch64Semantics.hpp
-- Up-to-date: /usr/local/include/triton/aarch64Specifications.hpp
-- Up-to-date: /usr/local/include/triton/archEnums.hpp
-- Up-to-date: /usr/local/include/triton/architecture.hpp
...
-- Up-to-date: /usr/local/include/triton/x86Specifications.hpp
-- Up-to-date: /usr/local/include/triton/z3Solver.hpp
-- Up-to-date: /usr/local/include/triton/z3ToTriton.hpp
-- Installing: /usr/local/include/triton/version.hpp
-- Installing: /usr/local/include/triton/config.hpp
-- Installing: /usr/local/lib/cmake/triton/tritonConfig.cmake
-- Installing: /usr/local/lib/cmake/triton/tritonConfigVersion.cmake
-- Installing: /usr/lib/python3.8/site-packages/triton.so

run example

fr0g2s@LGgram14:~/src/Triton/build/src/examples/cpp$ ./block
terminate called after throwing an instance of 'triton::exceptions::Disassembly'
  what():  x8664Cpu::disassembly(): Invalid operand.
Aborted
fr0g2s@LGgram14:~/src/Triton/build/src/examples/cpp$ ./constraint
terminate called after throwing an instance of 'triton::exceptions::Disassembly'
  what():  x8664Cpu::disassembly(): Invalid operand.
Aborted

How can i fix this error? Is this error related to the message "Consolidate compiler generated dependencies of target" ?

JonathanSalwan commented 1 year ago

I've never seen Consolidate compiler generated dependencies of target before. However, i'm pretty sure the error is a linking/compiling issue with capstone. Make sure you have only one capstone library on your system. If not, make sure the capstone include used when compiling Triton are those from the capstone libraries used at the runtime.

fr0g2s commented 1 year ago

This version also shows Consolidate compiler generated dependencies of target . But no error x8664Cpu::disassembly(): Invalid operand. in example.

build Triton 0.6

fr0g2s@LGgram14:~/src/Triton-0.6/build$ sudo make install
[  1%] Built target gen-syscall32
[  2%] Built target gen-syscall64
Consolidate compiler generated dependencies of target triton
[ 85%] Built target triton
[ 85%] Built target python-triton
Consolidate compiler generated dependencies of target taint_reg
[ 87%] Built target taint_reg
Consolidate compiler generated dependencies of target info_reg
[ 90%] Built target info_reg
Consolidate compiler generated dependencies of target ir
[ 92%] Built target ir
Consolidate compiler generated dependencies of target simplification
[ 95%] Built target simplification
Consolidate compiler generated dependencies of target constraint
[ 97%] Built target constraint
Consolidate compiler generated dependencies of target ctest_api
[100%] Built target ctest_api
Install the project...
-- Install configuration: "Release"
-- Installing: /usr/local/lib/libtriton.so
...
-- Up-to-date: /usr/local/include/triton
-- Installing: /usr/local/include/triton/version.hpp
-- Installing: /usr/lib/python2.7/dist-packages/triton.so

run example

fr0g2s@LGgram14:~/src/Triton-0.6/build/src/examples/cpp$ ./constraint
RAX expr: (bvxor SymVar_0 (_ bv287454020 64))
constraint: (= (bvxor SymVar_0 (_ bv287454020 64)) (_ bv0 64))
Model:
  - Variable id  : 0
  - Variable name: SymVar_0
  - Value        : 11223344

I guess Consolidate compiler generated dependencies of target message doesn't seem to be related to x8664Cpu::disassembly(): Invalid operand..

JonathanSalwan commented 1 year ago

So the problem is sovled? Btw, Triton 0.6 is very very old...

fr0g2s commented 1 year ago

I can use old version Triton to avoid this error. But i still don't know why I'm getting the error x8664Cpu::disassembly(): invalid operand in recent Triton.

JonathanSalwan commented 1 year ago

Because you probably have different version of capstone or you are using an old version of capstone e.g: 3.0.5. Try with capstone 4.0.2 or 5.x

fr0g2s commented 1 year ago

I used capstone 4.0.2 on my first try.

JonathanSalwan commented 1 year ago

And are you sure that include used at the compile are those from the capstone 4.0.2 ?

fr0g2s commented 1 year ago

I saw capstone 4.0.2 when do cmake.

fr0g2s@LGgram14:~/src/Triton/build$ cmake ..
...
-- Z3 version: 4.8.7.0
-- Compiling with Capstone
-- Found CAPSTONE include directory: /usr/include
-- Found CAPSTONE library: /usr/lib/x86_64-linux-gnu/libcapstone.so
-- CAPSTONE version: 4.0.2
-- Compiling with Boost headers
...
-- Build files have been written to: /home/fr0g2s/src/Triton/build

Any other way to check the capstone version?

JonathanSalwan commented 1 year ago

Can you do:

$ ldd /usr/local/lib/libtriton.so

And see if the libtriton.so is linked to /usr/lib/x86_64-linux-gnu/libcapstone.so?

Can you also past the output of the following commands:

$ sudo updatedb
$ locate libcapstone
fr0g2s commented 1 year ago

There was no libcapstone.

fr0g2s@LGgram14:~/src/Triton/build$ ldd /usr/local/lib/libtriton.so
        linux-vdso.so.1 (0x00007fff0dd94000)
        libpython3.8.so.1.0 => /lib/x86_64-linux-gnu/libpython3.8.so.1.0 (0x00007f621ef76000)
        libz3.so.4 => /lib/x86_64-linux-gnu/libz3.so.4 (0x00007f621d9d6000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f621d7f4000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f621d7d9000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f621d5e7000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f621d5b9000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f621d59b000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f621d578000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f621d572000)
        libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f621d56d000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f621d41e000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f621fcba000)

libacpstone.so was in /usr/lib. so i copied it to /lib/x86_64-linux-gnu/ and removed all built files and built again.

fr0g2s@LGgram14:~/src/Triton/build$ locate libcapstone
/home/fr0g2s/src/capstone-4.0.2/libcapstone.a
/home/fr0g2s/src/capstone-4.0.2/libcapstone.so.4
/home/fr0g2s/src/capstone-4.0.2/tests/libcapstone.so
/home/fr0g2s/src/capstone-4.0.2/tests/libcapstone.so.4
/usr/lib/libcapstone.a
/usr/lib/libcapstone.so
/usr/lib/libcapstone.so.4
/usr/lib/x86_64-linux-gnu/libcapstone.a
/usr/share/doc/libcapstone-dev
/usr/share/doc/libcapstone3
/usr/share/doc/libcapstone-dev/CREDITS.TXT
/usr/share/doc/libcapstone-dev/HACK.TXT
/usr/share/doc/libcapstone-dev/README
/usr/share/doc/libcapstone-dev/TODO
/usr/share/doc/libcapstone-dev/changelog.Debian.gz
/usr/share/doc/libcapstone-dev/copyright
/usr/share/doc/libcapstone3/changelog.Debian.gz
/usr/share/doc/libcapstone3/copyright
/var/cache/apt/archives/libcapstone-dev_4.0.1+really+3.0.5-1build1_amd64.deb
/var/cache/apt/archives/libcapstone3_4.0.1+really+3.0.5-1build1_amd64.deb
/var/lib/dpkg/info/libcapstone-dev:amd64.list
/var/lib/dpkg/info/libcapstone-dev:amd64.md5sums
/var/lib/dpkg/info/libcapstone3:amd64.list
/var/lib/dpkg/info/libcapstone3:amd64.md5sums
/var/lib/dpkg/info/libcapstone3:amd64.shlibs
/var/lib/dpkg/info/libcapstone3:amd64.symbols
/var/lib/dpkg/info/libcapstone3:amd64.triggers

Now there is no x8664Cpu::disassembly(): invalid operand error.

fr0g2s@LGgram14:~/src/Triton/build$ ldd /usr/local/lib/libtriton.so
        linux-vdso.so.1 (0x00007ffd27ffb000)
        libpython3.8.so.1.0 => /lib/x86_64-linux-gnu/libpython3.8.so.1.0 (0x00007f5ad954a000)
        libz3.so.4 => /lib/x86_64-linux-gnu/libz3.so.4 (0x00007f5ad7faa000)
        libcapstone.so.4 => /lib/libcapstone.so.4 (0x00007f5ad793b000)
        libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5ad7759000)
        libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5ad773e000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5ad754c000)
        libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f5ad751c000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f5ad7500000)
        libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5ad74dd000)
        libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5ad74d7000)
        libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f5ad74d2000)
        libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5ad7383000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5ad9ff0000)
fr0g2s@LGgram14:~/src/Triton/build$ src/examples/cpp/block
0x0: mov eax, edx
0x2: xor ah, 0x99
0x5: test eax, eax
0x7: je 0x11
----------
0x0: mov eax, edx
0x2: xor ah, 0x99
0x5: test eax, eax
0x7: je 0x11
0x9: nop
0xa: nop
0xb: nop
----------
0x2: xor ah, 0x99
0x5: test eax, eax
0x7: je 0x11
0x9: nop
0xa: nop
0xb: nop
----------
0x1000: xor ah, 0x99
0x1003: test eax, eax
0x1005: je 0x100f
0x1007: nop
0x1008: nop
0x1009: nop
First addr: 0x1000
Last addr: 1009
Number of instructions: 6
----------
0x0: xor ah, 0x99
0x3: test eax, eax
0x5: nop
0x6: nop
0x7: nop

Thank you so much.