Difference between revisions of "Duby/Capstone"
m (→See Also) |
m (→See Also) |
||
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) | ||
+ | |||
+ | ==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 | ||
+ | {$linklib libmsvcrt} // following symbols are used: | ||
+ | // _malloc _calloc _realloc _free _vsnprintf | ||
+ | // _memset _memcpy _strncpy _sprintf _strlen | ||
+ | // _strrchr _strncmp _strstr _strcmp _strchr | ||
+ | // _memmove _strcpy _atoi _tolower | ||
+ | {$linklib libgcc} // following symbols are used: | ||
+ | // ___ctzdi2 ___popcountsi2 ___popcountdi2 | ||
+ | // ___umoddi3 ___udivdi3 | ||
+ | |||
+ | |||
+ | The dependencies are pretty typical for mingw compilation. | ||
==See Also== | ==See Also== |
Revision as of 09:47, 31 October 2017
Capstone Engine is an open source library for disassembly.
Compiling with Mingw
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)
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 {$linklib libmsvcrt} // following symbols are used: // _malloc _calloc _realloc _free _vsnprintf // _memset _memcpy _strncpy _sprintf _strlen // _strrchr _strncmp _strstr _strcmp _strchr // _memmove _strcpy _atoi _tolower {$linklib libgcc} // following symbols are used: // ___ctzdi2 ___popcountsi2 ___popcountdi2 // ___umoddi3 ___udivdi3
The 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)