1
0
mirror of https://github.com/bitdefender/bddisasm.git synced 2024-10-18 05:48:56 +00:00

Add support for builds without mnemonics.

This commit is contained in:
Andrei KISARI 2024-08-28 10:18:10 +03:00
parent ed19a468e6
commit 68166adcbd
6 changed files with 25 additions and 4 deletions

View File

@ -5,6 +5,7 @@ option(BDD_INCLUDE_ISAGENERATOR_X86 "Include the x86 isagenerator target (if a p
option(BDD_INCLUDE_FUZZERS "Include the bdshemu fuzzer" OFF) option(BDD_INCLUDE_FUZZERS "Include the bdshemu fuzzer" OFF)
option(BDD_USE_EXTERNAL_VSNPRINTF "Expect nd_vsnprintf_s implementation from the integrator" OFF) option(BDD_USE_EXTERNAL_VSNPRINTF "Expect nd_vsnprintf_s implementation from the integrator" OFF)
option(BDD_USE_EXTERNAL_MEMSET "Expect nd_memset implementation from the integrator" OFF) option(BDD_USE_EXTERNAL_MEMSET "Expect nd_memset implementation from the integrator" OFF)
option(BDD_NO_MNEMONIC "Exclude mnemonics - this option involves setting the BDDISASM_NO_FORMAT flag" OFF)
option(BDD_ASAN "Build with ASAN" OFF) option(BDD_ASAN "Build with ASAN" OFF)
option(BDD_UBSAN "Build with UBSAN" OFF) option(BDD_UBSAN "Build with UBSAN" OFF)
@ -143,6 +144,11 @@ if (NOT BDD_USE_EXTERNAL_MEMSET)
endif () endif ()
endif () endif ()
if (BDD_NO_MNEMONIC)
target_compile_definitions(bddisasm PUBLIC -DBDDISASM_NO_MNEMONIC)
target_compile_definitions(bddisasm PUBLIC -DBDDISASM_NO_FORMAT)
endif()
set_target_properties( set_target_properties(
bddisasm bddisasm
PROPERTIES POSITION_INDEPENDENT_CODE ON PROPERTIES POSITION_INDEPENDENT_CODE ON

View File

@ -4308,7 +4308,9 @@ NdCopyInstructionInfo(
ND_IDBE *Idbe ND_IDBE *Idbe
) )
{ {
#ifndef BDDISASM_NO_MNEMONIC
Instrux->Mnemonic = gMnemonics[Idbe->Mnemonic]; Instrux->Mnemonic = gMnemonics[Idbe->Mnemonic];
#endif // !BDDISASM_NO_MNEMONIC
Instrux->Attributes = Idbe->Attributes; Instrux->Attributes = Idbe->Attributes;
Instrux->Instruction = (ND_INS_CLASS)Idbe->Instruction; Instrux->Instruction = (ND_INS_CLASS)Idbe->Instruction;
Instrux->Category = (ND_INS_CATEGORY)Idbe->Category; Instrux->Category = (ND_INS_CATEGORY)Idbe->Category;

View File

@ -6,8 +6,7 @@
#include "../inc/bddisasm.h" #include "../inc/bddisasm.h"
#if !defined(BDDISASM_NO_MNEMONIC) && !defined(BDDISASM_NO_FORMAT)
#ifndef BDDISASM_NO_FORMAT
static const char *const gReg8Bit[] = static const char *const gReg8Bit[] =
{ {
@ -1033,4 +1032,4 @@ NdToText(
return ND_STATUS_SUCCESS; return ND_STATUS_SUCCESS;
} }
#endif // !BDDISASM_NO_FORMAT #endif // !defined(BDDISASM_NO_MNEMONIC) && !defined(BDDISASM_NO_FORMAT)

View File

@ -10,6 +10,8 @@
#ifndef BDX86_MNEMONICS_H #ifndef BDX86_MNEMONICS_H
#define BDX86_MNEMONICS_H #define BDX86_MNEMONICS_H
#ifndef BDDISASM_NO_MNEMONIC
const char *gMnemonics[1786] = const char *gMnemonics[1786] =
{ {
"AAA", "AAD", "AADD", "AAM", "AAND", "AAS", "ADC", "ADCX", "ADD", "AAA", "AAD", "AADD", "AAM", "AAND", "AAS", "ADC", "ADCX", "ADD",
@ -320,6 +322,8 @@ const char *gMnemonics[1786] =
"XSAVES", "XSAVES64", "XSETBV", "XSUSLDTRK", "XTEST", "XSAVES", "XSAVES64", "XSETBV", "XSUSLDTRK", "XTEST",
}; };
#endif // !BDDISASM_NO_MNEMONIC
#endif #endif

View File

@ -1439,7 +1439,9 @@ typedef struct _INSTRUX
// Aliased over low 4 bits inside the main opcode. // Aliased over low 4 bits inside the main opcode.
}; };
#ifndef BDDISASM_NO_MNEMONIC
const char *Mnemonic; // Instruction mnemonic. const char *Mnemonic; // Instruction mnemonic.
#endif // !BDDISASM_NO_MNEMONIC
ND_UINT8 InstructionBytes[16]; // The entire instruction. ND_UINT8 InstructionBytes[16]; // The entire instruction.
ND_UINT8 OpCodeBytes[3]; // Opcode bytes - escape codes and main opcode. ND_UINT8 OpCodeBytes[3]; // Opcode bytes - escape codes and main opcode.

View File

@ -801,6 +801,8 @@ def dump_mnemonics(mnemonics, prefixes, fname):
f.write('#ifndef BDX86_MNEMONICS_H\n') f.write('#ifndef BDX86_MNEMONICS_H\n')
f.write('#define BDX86_MNEMONICS_H\n') f.write('#define BDX86_MNEMONICS_H\n')
f.write('\n') f.write('\n')
f.write('#ifndef BDDISASM_NO_MNEMONIC\n')
f.write('\n')
f.write('const char *gMnemonics[%d] = \n' % len(mnemonics)) f.write('const char *gMnemonics[%d] = \n' % len(mnemonics))
f.write('{\n') f.write('{\n')
f.write(' ') f.write(' ')
@ -815,7 +817,13 @@ def dump_mnemonics(mnemonics, prefixes, fname):
ln = 0 ln = 0
f.write('\n ') f.write('\n ')
f.write('\n};\n\n\n')
f.write('\n};\n')
f.write('\n')
f.write('#endif // !BDDISASM_NO_MNEMONIC\n')
f.write('\n\n')
f.write('#endif\n\n') f.write('#endif\n\n')