From 0af56019c26a6f5007d2dfa12e90a2091e1f13a6 Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 11:04:30 +0200 Subject: [PATCH 01/12] Initial CMake support --- .gitignore | 3 ++ CMakeLists.txt | 117 ++++++++++++++++++++++++++++++++++++++++++ inc/bdshemu/bdshemu.h | 2 +- libbddisasm.pc.in | 19 +++++++ project-meta-info.in | 4 ++ 5 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 CMakeLists.txt create mode 100644 libbddisasm.pc.in create mode 100644 project-meta-info.in diff --git a/.gitignore b/.gitignore index 587ccdd..7f202ef 100644 --- a/.gitignore +++ b/.gitignore @@ -63,3 +63,6 @@ bdshemu_fuzz/shfuzz bdshemu_fuzz/out-32 bdshemu_fuzz/out-64 docs/build +libbddisasm.pc +build +.vscode diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..714b550 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,117 @@ +cmake_minimum_required(VERSION 3.13) + +include("${CMAKE_CURRENT_LIST_DIR}/project-meta-info.in") + +project(bddisasm + VERSION ${project_version} + DESCRIPTION ${project_description} + LANGUAGES C + ) + +if (NOT CMAKE_BUILD_TYPE) + message(STATUS "No build type given. Will use 'Debug'") + set(CMAKE_BUILD_TYPE Debug) +endif () + +set(bddisasm_src + bddisasm/crt.c + bddisasm/bddisasm.c + ) +add_library(bddisasm STATIC ${bddisasm_src}) +set_target_properties(bddisasm PROPERTIES + POSITION_INDEPENDENT_CODE ON + C_STANDARD 11 + VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} + ) + +set(bdshemu_src + bdshemu/bdshemu.c + ) +add_library(bdshemu STATIC ${bdshemu_src}) +set_target_properties(bdshemu PROPERTIES + POSITION_INDEPENDENT_CODE ON + C_STANDARD 11 + VERSION ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} + ) +add_dependencies(bdshemu bddisasm) + +include_directories( + inc + inc/bdshemu + bddisasm/include + ) + +if (CMAKE_BUILD_TYPE EQUAL "Release") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Ofast -DNDEBUG") +else () + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O0 -D_DEBUG -DDEBUG") +endif () + +add_compile_options( + "$<$:-U_FORTIFY_SOURCE>" + "$<$:-D_FORTIFY_SOURCE=2>" + -Wall + -Wno-unknown-pragmas + -Wextra + -Wshadow + -Wformat-security + -Wstrict-overflow=2 + -Wstrict-prototypes + -Wwrite-strings + -Wshadow + -Winit-self + -Wswitch-default + -Wmissing-variable-declarations + -Wused-but-marked-unused + -Wswitch-enum + -Wno-unused-function + -Wno-multichar + -Wno-incompatible-pointer-types + -Wcast-qual + -Wnull-dereference + -Wduplicated-cond + -Werror=format-security + -Werror=implicit-function-declaration + -pipe + -fwrapv + -fno-strict-aliasing + -fstack-protector-strong + -fno-omit-frame-pointer + -ffunction-sections + -fdata-sections + -g3 + -gdwarf-4 + -grecord-gcc-switches + -march=nehalem + ) + +include(GNUInstallDirs) + +set(CMAKE_SKIP_BUILD_RPATH TRUE) +set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) +set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}") +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + +get_filename_component(public_header_path "${PROJECT_SOURCE_DIR}/inc" REALPATH) +file(GLOB_RECURSE public_headers "${public_header_path}/*.h") +set_target_properties(bddisasm PROPERTIES PUBLIC_HEADER "${public_headers}") + +set(DEST_DIR "${CMAKE_INSTALL_PREFIX}") +set(LIB_DIR "${CMAKE_INSTALL_LIBDIR}") +set(INC_DIR "${CMAKE_INSTALL_INCLUDEDIR}") +set(PRIVATE_LIBS "-lbddisasm -lbdshemu") +set(DATA_DIR "${CMAKE_INSTALL_DATADIR}") + +CONFIGURE_FILE("${CMAKE_STATIC_LIBRARY_PREFIX}bddisasm.pc.in" + "${PROJECT_SOURCE_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}bddisasm.pc" + @ONLY + ) + +INSTALL(TARGETS bddisasm bdshemu + LIBRARY DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}" + PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}/bddisasm" + ) + +INSTALL(FILES "${PROJECT_SOURCE_DIR}/${CMAKE_STATIC_LIBRARY_PREFIX}bddisasm.pc" + DESTINATION "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/pkgconfig" + ) diff --git a/inc/bdshemu/bdshemu.h b/inc/bdshemu/bdshemu.h index 06eea39..31080af 100644 --- a/inc/bdshemu/bdshemu.h +++ b/inc/bdshemu/bdshemu.h @@ -6,7 +6,7 @@ #define BDSHEMU_H -#include "../bddisasm.h" +#include "bddisasm.h" // diff --git a/libbddisasm.pc.in b/libbddisasm.pc.in new file mode 100644 index 0000000..9a0ff8c --- /dev/null +++ b/libbddisasm.pc.in @@ -0,0 +1,19 @@ +dir_prefix=@DEST_DIR@ +lib=@LIB_DIR@ +include=@INC_DIR@ +data_dir=@DATA_DIR@ + +prefix=${dir_prefix} +lib_dir=${dir_prefix}/${lib} +include_dir=${dir_prefix}/${include} + +datarootdir=${dir_prefix}/${data_dir} +pkgdatadir=${datarootdir}/bddisasm + +Name: bddisasm +Description: "Bitdefender x86 instruction decoder and shellcode emulator" +URL: https://github.com/bitdefender/bddisasm +Version: @PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@ + +Libs: -L${lib_dir} @PRIVATE_LIBS@ +Cflags: -I${include_dir} diff --git a/project-meta-info.in b/project-meta-info.in new file mode 100644 index 0000000..ca57cb6 --- /dev/null +++ b/project-meta-info.in @@ -0,0 +1,4 @@ +# project-meta-info.in + +set(project_version 1.31.3) +set(project_description "Bitdefender x86 instruction decoder and emulator") From fbafa8b8f501fd1bf53c87104ca45b09317a1cd6 Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 11:19:31 +0200 Subject: [PATCH 02/12] Set the output directory to bin/x64/ This is consistent with the current Makefiles --- CMakeLists.txt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 714b550..3f16e4a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -13,6 +13,12 @@ if (NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Debug) endif () +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/x64/${CMAKE_BUILD_TYPE}) +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/x64/${CMAKE_BUILD_TYPE}) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/x64/${CMAKE_BUILD_TYPE}) + +message(STATUS "Output directory set to: ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") + set(bddisasm_src bddisasm/crt.c bddisasm/bddisasm.c From 3ac7fec72912268990d54381dd7ee6c777298201 Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 11:31:14 +0200 Subject: [PATCH 03/12] Lower the minimum required CMake version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 3f16e4a..293473c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.13) +cmake_minimum_required(VERSION 3.12) include("${CMAKE_CURRENT_LIST_DIR}/project-meta-info.in") From 2ebfd04da0937a8252bf29e919a496bc0490bb68 Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 11:31:23 +0200 Subject: [PATCH 04/12] Update README --- README.md | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a31cd16..5d23e6b 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The main objectives of this disassembler are: 4. Easy to work with - just include the main header file, bddisasm.h, link with the bddisasm library, and call the NdDecode API! 5. Complete - support every x86 instruction to date, and provide as much information as possible. -## Build +## Build and install ### Windows @@ -54,6 +54,29 @@ In order to build the projects on Linux you need: * gcc * make +* cmake 3.12 or newer (optional) + +#### Building and installing with make + +In order to build bddisasm and bdshemu run `make` in the root of the repository. The results will be placed in the bin directory. + +In order to install bddisasm and bdshemu run `make install`. + +#### Building and installing with cmake + +```console +mkdir build +cd build + +cmake .. + +make +make install +``` + +Note that the current install behavior differs based on how the installation is done. When using make, the `bdshemu.h` header is placed by default in `include/bddisasm/bdshemu` in your install location, while the cmake method will place it in `include/bddisasm`. Using cmake also provides support for pkg-config. + +### Building disasmtool_lix For disasmtool_lix you also need: @@ -61,8 +84,6 @@ For disasmtool_lix you also need: * cmake 3.12 or newer * [RapidJSON](https://github.com/Tencent/rapidjson/) -In order to build bddisasm and bdshemu run `make` in the root of the repository. The results will be placed in the bin directory. - In order to build disasmtool_lix go to the disasmtool_lix directory and run `make`. The results will be in the bin directory in the disasmtool_lix/build directory. ## Decoding instructions From baad8a4bd06b0b3f6ea750bbae976ef700d7fe31 Mon Sep 17 00:00:00 2001 From: Anichitei Ionel-Cristinel <49393881+ianichitei@users.noreply.github.com> Date: Tue, 17 Nov 2020 11:33:55 +0200 Subject: [PATCH 05/12] ci: Use CMake when building on Linux --- .github/workflows/ci.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 92df289..deb7cf0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,12 @@ jobs: steps: - uses: actions/checkout@v2 - name: Build bddisasm and bdshemu - run: make -j$(nproc) + run: | + mkdir build + cd build + cmake .. + make + cd - - name: Install rapidjson uses: actions/checkout@master with: From 2eb472cdab70f46d8b9858bb259d77433640044e Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 11:40:25 +0200 Subject: [PATCH 06/12] Ignore disasmtool_lix/_build --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 7f202ef..9adf611 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,4 @@ docs/build libbddisasm.pc build .vscode +disasmtool_lix/_build From f5d91d7cb5163a0d33a3776a16d0c2e626137e84 Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 11:41:19 +0200 Subject: [PATCH 07/12] Use Release as the default build type --- CMakeLists.txt | 4 ++-- README.md | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 293473c..05e6047 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,8 +9,8 @@ project(bddisasm ) if (NOT CMAKE_BUILD_TYPE) - message(STATUS "No build type given. Will use 'Debug'") - set(CMAKE_BUILD_TYPE Debug) + message(STATUS "No build type given. Will use 'Release'") + set(CMAKE_BUILD_TYPE Release) endif () set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin/x64/${CMAKE_BUILD_TYPE}) diff --git a/README.md b/README.md index 5d23e6b..9087621 100644 --- a/README.md +++ b/README.md @@ -74,6 +74,8 @@ make make install ``` +The default build type is Release. + Note that the current install behavior differs based on how the installation is done. When using make, the `bdshemu.h` header is placed by default in `include/bddisasm/bdshemu` in your install location, while the cmake method will place it in `include/bddisasm`. Using cmake also provides support for pkg-config. ### Building disasmtool_lix From 190d3e59f3a9f1e3ec4826b1e0dcc5fdd3d85c75 Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 12:44:10 +0200 Subject: [PATCH 08/12] Extract version information from version.h This is done so we have a single place that holds versioning information. While it would be easier to generate the DISASM_VERSION_* definitions based on the PROJECT_VERSION_* values, doing this for Visual Studio builds that do not use CMake is not trivial --- CMakeLists.txt | 14 +++++++++++++- project-meta-info.in | 1 - 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 05e6047..66aebd5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,8 +2,20 @@ cmake_minimum_required(VERSION 3.12) include("${CMAKE_CURRENT_LIST_DIR}/project-meta-info.in") +set(disasm_version_file ${CMAKE_SOURCE_DIR}/inc/version.h) + +file(STRINGS ${disasm_version_file} disasm_ver_major REGEX "DISASM_VERSION_MAJOR") +file(STRINGS ${disasm_version_file} disasm_ver_minor REGEX "DISASM_VERSION_MINOR") +file(STRINGS ${disasm_version_file} disasm_ver_patch REGEX "DISASM_VERSION_REVISION") + +string(REGEX REPLACE "#define DISASM_VERSION_MAJOR[ \t\r\n]*" "" disasm_ver_major ${disasm_ver_major}) +string(REGEX REPLACE "#define DISASM_VERSION_MINOR[ \t\r\n]*" "" disasm_ver_minor ${disasm_ver_minor}) +string(REGEX REPLACE "#define DISASM_VERSION_REVISION[ \t\r\n]*" "" disasm_ver_patch ${disasm_ver_patch}) + +message(STATUS "Extracted version from ${disasm_version_file}: ${disasm_ver_major}.${disasm_ver_minor}.${disasm_ver_patch}") + project(bddisasm - VERSION ${project_version} + VERSION ${disasm_ver_major}.${disasm_ver_minor}.${disasm_ver_patch} DESCRIPTION ${project_description} LANGUAGES C ) diff --git a/project-meta-info.in b/project-meta-info.in index ca57cb6..a56c711 100644 --- a/project-meta-info.in +++ b/project-meta-info.in @@ -1,4 +1,3 @@ # project-meta-info.in -set(project_version 1.31.3) set(project_description "Bitdefender x86 instruction decoder and emulator") From 15fe86d7d3573fed140423d5054cee9ecabb30c4 Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 13:20:49 +0200 Subject: [PATCH 09/12] Fix library order --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 66aebd5..0fe6596 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -117,7 +117,7 @@ set_target_properties(bddisasm PROPERTIES PUBLIC_HEADER "${public_headers}") set(DEST_DIR "${CMAKE_INSTALL_PREFIX}") set(LIB_DIR "${CMAKE_INSTALL_LIBDIR}") set(INC_DIR "${CMAKE_INSTALL_INCLUDEDIR}") -set(PRIVATE_LIBS "-lbddisasm -lbdshemu") +set(PRIVATE_LIBS "-lbdshemu -lbddisasm") set(DATA_DIR "${CMAKE_INSTALL_DATADIR}") CONFIGURE_FILE("${CMAKE_STATIC_LIBRARY_PREFIX}bddisasm.pc.in" From 81664ff09f1e2df4adfa2148bc4636c9f7b4953c Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 14:16:35 +0200 Subject: [PATCH 10/12] Use CMAKE_CURRENT_LIST_DIR instead of CMAKE_SOURCE_DIR when reading version.h --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0fe6596..ddc19ce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ cmake_minimum_required(VERSION 3.12) include("${CMAKE_CURRENT_LIST_DIR}/project-meta-info.in") -set(disasm_version_file ${CMAKE_SOURCE_DIR}/inc/version.h) +set(disasm_version_file ${CMAKE_CURRENT_LIST_DIR}/inc/version.h) file(STRINGS ${disasm_version_file} disasm_ver_major REGEX "DISASM_VERSION_MAJOR") file(STRINGS ${disasm_version_file} disasm_ver_minor REGEX "DISASM_VERSION_MINOR") From c1c3770cc6ada75606b66b768162eba3c0a51b5e Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 16:03:16 +0200 Subject: [PATCH 11/12] Move bdhsemu.h to inc/ --- bdshemu/Makefile | 6 +++--- bdshemu/bdshemu.c | 2 +- bdshemu/bdshemu.vcxproj | 2 +- bdshemu/bdshemu.vcxproj.filters | 2 +- disasmtool/disasmtool.c | 2 +- disasmtool_lix/CMakeLists.txt | 1 - inc/{bdshemu => }/bdshemu.h | 0 7 files changed, 7 insertions(+), 8 deletions(-) rename inc/{bdshemu => }/bdshemu.h (100%) diff --git a/bdshemu/Makefile b/bdshemu/Makefile index 5fe016f..0564447 100644 --- a/bdshemu/Makefile +++ b/bdshemu/Makefile @@ -4,7 +4,7 @@ SRC_FILES := bdshemu.c OBJECTS := $(SRC_FILES:.c=.o) -INCLUDES := -I. -I../inc -I../bddisasm/include -I../inc/bdshemu +INCLUDES := -I. -I../inc -I../bddisasm/include ifeq ($(PLATFORM),) PLATFORM := x64 @@ -119,5 +119,5 @@ clean: clean_lib_file clean_int_dir clean_dep_dir install: all install -d $(DESTDIR)$(PREFIX)/lib/ install -m 644 $(OUT_DIR)/$(LIB_NAME) $(DESTDIR)$(PREFIX)/lib/ - install -d $(DESTDIR)$(PREFIX)/include/bddisasm/bdshemu/ - cp -r ../inc/bdshemu/* $(DESTDIR)$(PREFIX)/include/bddisasm/bdshemu/ \ No newline at end of file + install -d $(DESTDIR)$(PREFIX)/include/bddisasm/ + cp -r ../inc/bdshemu.h $(DESTDIR)$(PREFIX)/include/bddisasm/ \ No newline at end of file diff --git a/bdshemu/bdshemu.c b/bdshemu/bdshemu.c index 991ac5a..3317cea 100644 --- a/bdshemu/bdshemu.c +++ b/bdshemu/bdshemu.c @@ -9,7 +9,7 @@ #include "nd_crt.h" #include "bddisasm.h" -#include "bdshemu/bdshemu.h" +#include "bdshemu.h" // diff --git a/bdshemu/bdshemu.vcxproj b/bdshemu/bdshemu.vcxproj index 8b8e939..d2b40e0 100644 --- a/bdshemu/bdshemu.vcxproj +++ b/bdshemu/bdshemu.vcxproj @@ -405,7 +405,7 @@ - + diff --git a/bdshemu/bdshemu.vcxproj.filters b/bdshemu/bdshemu.vcxproj.filters index 626a3f0..ba58200 100644 --- a/bdshemu/bdshemu.vcxproj.filters +++ b/bdshemu/bdshemu.vcxproj.filters @@ -23,7 +23,7 @@ - + Header Files\public diff --git a/disasmtool/disasmtool.c b/disasmtool/disasmtool.c index 4472f27..e15abcf 100644 --- a/disasmtool/disasmtool.c +++ b/disasmtool/disasmtool.c @@ -11,7 +11,7 @@ typedef uint64_t QWORD, *PQWORD; // Main disasm header file. -#include "bdshemu\bdshemu.h" +#include "bdshemu.h" #include "bddisasm.h" diff --git a/disasmtool_lix/CMakeLists.txt b/disasmtool_lix/CMakeLists.txt index 17ea8d8..b937996 100644 --- a/disasmtool_lix/CMakeLists.txt +++ b/disasmtool_lix/CMakeLists.txt @@ -253,7 +253,6 @@ endif() include_directories( ${DISASM_DIRECTORY}/inc - ${DISASM_DIRECTORY}/inc/bdshemu ${DISASM_DIRECTORY}/bddisasm/include ) diff --git a/inc/bdshemu/bdshemu.h b/inc/bdshemu.h similarity index 100% rename from inc/bdshemu/bdshemu.h rename to inc/bdshemu.h From b942b3768014e31e01d3b4f072087bdb6da18718 Mon Sep 17 00:00:00 2001 From: Ionel-Cristinel ANICHITEI Date: Tue, 17 Nov 2020 16:09:36 +0200 Subject: [PATCH 12/12] Don't supply inc/bdshemu as an include path for cppcheck --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index deb7cf0..10e9079 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,5 +93,5 @@ jobs: - name: Run cppcheck run: cppcheck --error-exitcode=1 --language=c \ --enable=all --suppress=missingIncludeSystem --suppress=unusedStructMember --suppress=unusedFunction \ - -I inc/ -I inc/bdshemu -I bddisasm/include bddisasm/ bdshemu/ \ + -I inc/ -I bddisasm/include bddisasm/ bdshemu/ \ /