Difference between revisions of "Duby/Capstone"
m (→Static Linking) |
m (→Compiling with Mingw) |
||
Line 2: | Line 2: | ||
− | ==Compiling with Mingw== | + | ==Compiling with Mingw (32 or 64)== |
The default compilation doesn't work and fails with a linking error: | The default compilation doesn't work and fails with a linking error: | ||
./arch/Sparc/SparcInstPrinter.o:SparcInstPrinter.c:(.text+0x4e0): multiple definition of `imaxabs' | ./arch/Sparc/SparcInstPrinter.o:SparcInstPrinter.c:(.text+0x4e0): multiple definition of `imaxabs' | ||
Line 13: | Line 13: | ||
CFLAGS="-llibmingwex" ./make.sh gcc | CFLAGS="-llibmingwex" ./make.sh gcc | ||
Adding libmingwex library for compilation prevents imaxabs to be inserted into .o file (because the function is implemented in mingwex) | Adding libmingwex library for compilation prevents imaxabs to be inserted into .o file (because the function is implemented in mingwex) | ||
+ | |||
+ | |||
+ | For x64, there's [https://sourceforge.net/projects/mingw-w64/ Mingw-64 project]. | ||
==Static Linking== | ==Static Linking== |
Revision as of 11:08, 31 October 2017
Capstone Engine is an open source library for disassembly.
Compiling with Mingw (32 or 64)
The default compilation doesn't work and fails with a linking error:
./arch/Sparc/SparcInstPrinter.o:SparcInstPrinter.c:(.text+0x4e0): multiple definition of `imaxabs' ./arch/PowerPC/PPCInstPrinter.o:PPCInstPrinter.c:(.text+0x16030): first defined here collect2.exe: error: ld returned 1 exit status make: *** [libcapstone.so] Error 1
(for whatever reason "imaxabs" is included in resulting files as a stand-alone function, rather than inline function)
The following command line should be used to compile the library on MinGW (with gcc installed)
CFLAGS="-llibmingwex" ./make.sh gcc
Adding libmingwex library for compilation prevents imaxabs to be inserted into .o file (because the function is implemented in mingwex)
For x64, there's Mingw-64 project.
Static Linking
Once the static library is built, it's possible to link it statically to the executable. However, there are certain dependencies that must be resolved first.
{$linklib libcapstone} // library itself {$ifdef mswindows} {$linklib libmsvcrt} // MS Visual C runtime (mingw bindings) {$linklib libgcc} // C++ library {$endif}
- libmsvcrt for _malloc _calloc _realloc _free _vsnprintf _memset _memcpy _strncpy _sprintf _strlen _strrchr _strncmp _strstr _strcmp _strchr _memmove _strcpy _atoi _tolower
- libgcc for ___ctzdi2 ___popcountsi2 ___popcountdi2 ___umoddi3 ___udivdi3 (https://gcc.gnu.org/onlinedocs/gccint/Integer-library-routines.html)
Such dependencies are pretty typical for mingw compilation.
See Also
- duby
- http://www.capstone-engine.org/ - official Capstone Engine site
- https://github.com/stievie/TCapstone - Pascal bindings for Capstone Engine library by Stefan Ascher (stievie)