Some additional info - I reran the ./configure script as ./configure 
--with-pic --enable-crypto --enable-dotnet --enable-magic --enable-cuckoo 
--with-crypto  to include "--with-pic".  Yara, of course compiled, but when 
attempting to link libyara.a using the given makefile, additional errors 
were produced. A snapshot of those errors, below seems to indicate basic c 
standard library are no longer locatable in the libyara object files.  So

make SGX_DEBUG=1 SGX_MODE=SIM -f sgx/Makefile all  
make -C ./sgx/enclave_Intrusions_Enclave  -f sgx_u.mk all; 
make[1]: Entering directory 
`/home/dave/eclipse-workspace/SGX_Proj2/sgx/enclave_Intrusions_Enclave' 
GEN  =>  untrusted/Intrusions_Enclave_u.c 
CC   <=  untrusted/Intrusions_Enclave_u.c 
CXX  <=  untrusted/sample.c 
LINK =>  sample 
make[1]: Leaving directory 
`/home/dave/eclipse-workspace/SGX_Proj2/sgx/enclave_Intrusions_Enclave' 
make -C ./sgx/enclave_Intrusions_Enclave    -f sgx_t.mk all; 
make[1]: Entering directory 
`/home/dave/eclipse-workspace/SGX_Proj2/sgx/enclave_Intrusions_Enclave' 
GEN  =>  trusted/Intrusions_Enclave_t.c 
CC   <=  trusted/Intrusions_Enclave_t.c 
CC  <=  trusted/Intrusions_Enclave.c 
/usr/local/lib/libyara.a(lexer.o): In function `yara_yyfatal': 
lexer.c:(.text+0x819): undefined reference to `longjmp' 
/usr/local/lib/libyara.a(lexer.o): In function `yara_yylex': 
lexer.c:(.text+0x15db): undefined reference to `stdin' 
lexer.c:(.text+0x15eb): undefined reference to `stdout' 
lexer.c:(.text+0x18f4): undefined reference to `strtoll' 
lexer.c:(.text+0x19a7): undefined reference to `strtod' 
lexer.c:(.text+0x19eb): undefined reference to `strtoll' 
lexer.c:(.text+0x1a23): undefined reference to `strstr' 
lexer.c:(.text+0x1ad2): undefined reference to `strstr' 
lexer.c:(.text+0x1aea): undefined reference to `strstr' 
lexer.c:(.text+0x1b02): undefined reference to `strstr' 
lexer.c:(.text+0x1e9e): undefined reference to `fwrite' 
lexer.c:(.text+0x2479): undefined reference to `__isoc99_sscanf' 
lexer.c:(.text+0x29d5): undefined reference to `_IO_getc' 
lexer.c:(.text+0x2a0b): undefined reference to `ferror' 
lexer.c:(.text+0x2b5a): undefined reference to `strstr' 
lexer.c:(.text+0x2b9f): undefined reference to `strstr' 
lexer.c:(.text+0x2bb3): undefined reference to `strstr' 
lexer.c:(.text+0x2c75): undefined reference to `snprintf' 
lexer.c:(.text+0x2d05): undefined reference to `strrchr' 
lexer.c:(.text+0x2f15): undefined reference to `ferror' 
lexer.c:(.text+0x2f4e): undefined reference to `clearerr' 
lexer.c:(.text+0x2f86): undefined reference to `fread' 
/usr/local/lib/libyara.a(lexer.o): In function `yr_lex_parse_rules_string': 
lexer.c:(.text+0x30db): undefined reference to `_setjmp' 
/usr/local/lib/libyara.a(lexer.o): In function `yr_lex_parse_rules_file': 
lexer.c:(.text+0x31bb): undefined reference to `_setjmp' 
/usr/local/lib/libyara.a(lexer.o): In function `yr_lex_parse_rules_fd': 
lexer.c:(.text+0x3260): undefined reference to `_setjmp' 
lexer.c:(.text+0x328f): undefined reference to `__fxstat' 
lexer.c:(.text+0x32e4): undefined reference to `read'

etc....

So, just adding --with-pic to the ./configure command line isn't the 
answer.  Is there another ./configure option I need?

On Monday, November 19, 2018 at 7:29:16 AM UTC-5, dmw wrote:
>
> I'm attempting to compile libyara.a into an Intel SGX application wherein 
> I can run yara rules in an enclave.  Its compiled in Eclipse 2018-2019.  I 
> used the default procedure to create the libyara baseline:
>
> ./configure
> make
> make install
>
> The problem is that the compile/linking produces the following errors:
>
> 11:34:02 **** Build of configuration Intel(R) SGX Simulation Debug for 
> project non_sgx_empty_proj ****
> make SGX_DEBUG=1 SGX_MODE=SIM -f sgx/Makefile all 
> make -C ./sgx/enclave_yara_enclave  -f sgx_u.mk all;
> make[1]: Entering directory 
> `/home/developer/eclipse-workspace/non_sgx_empty_proj/sgx/enclave_yara_enclave'
> GEN  =>  untrusted/yara_enclave_u.c
> CC   <=  untrusted/yara_enclave_u.c
> CXX  <=  untrusted/sample.c
> LINK =>  sample
> make[1]: Leaving directory 
> `/home/developer/eclipse-workspace/non_sgx_empty_proj/sgx/enclave_yara_enclave'
> make -C ./sgx/enclave_yara_enclave    -f sgx_t.mk all;
> make[1]: Entering directory 
> `/home/developer/eclipse-workspace/non_sgx_empty_proj/sgx/enclave_yara_enclave'
> GEN  =>  trusted/yara_enclave_t.c
> CC   <=  trusted/yara_enclave_t.c
> CC  <=  trusted/yara_enclave.c
> /usr/bin/ld: /usr/local/lib/libyara.a(tests.o): relocation R_X86_64_32 
> against `.rodata.str1.1' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(pe.o): relocation R_X86_64_32 
> against `.rodata.str1.1' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(elf.o): relocation R_X86_64_32 
> against `.rodata.str1.1' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(math.o): relocation R_X86_64_32 
> against `.rodata.str1.1' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(time.o): relocation R_X86_64_32 
> against `.rodata.str1.1' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(pe_utils.o): relocation R_X86_64_32 
> against `.rodata.str1.1' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(cuckoo.o): relocation R_X86_64_32 
> against `.rodata.str1.1' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(magic.o): relocation R_X86_64_32S 
> against undefined hidden symbol `cached_mime_types' can not be used when 
> making a shared object
> make[1]: Leaving directory 
> `/home/developer/eclipse-workspace/non_sgx_empty_proj/sgx/enclave_yara_enclave'
> /usr/bin/ld: /usr/local/lib/libyara.a(hash.o): relocation R_X86_64_32 
> against `.rodata.str1.1' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(dotnet.o): relocation R_X86_64_32 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(grammar.o): relocation R_X86_64_32S 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(ahocorasick.o): relocation 
> R_X86_64_32 against `.rodata.str1.8' can not be used when making a shared 
> object; recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(arena.o): relocation R_X86_64_32 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(atoms.o): relocation R_X86_64_32S 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(bitmask.o): relocation R_X86_64_32 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(compiler.o): relocation R_X86_64_32 
> against hidden symbol `yr_object_destroy' can not be used when making a 
> shared object
> /usr/bin/ld: /usr/local/lib/libyara.a(exec.o): relocation R_X86_64_32S 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(lt1-hash.o): relocation R_X86_64_32S 
> against hidden symbol `byte_to_int32' can not be used when making a shared 
> object
> /usr/bin/ld: /usr/local/lib/libyara.a(hex_grammar.o): relocation 
> R_X86_64_32S against `.rodata' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(hex_lexer.o): relocation R_X86_64_32 
> against undefined hidden symbol `yr_recovery_state_key' can not be used 
> when making a shared object
> /usr/bin/ld: /usr/local/lib/libyara.a(lexer.o): relocation R_X86_64_32 
> against `.rodata.str1.8' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(libyara.o): relocation R_X86_64_32S 
> against undefined hidden symbol `yr_altercase' can not be used when making 
> a shared object
> /usr/bin/ld: /usr/local/lib/libyara.a(modules.o): relocation R_X86_64_32 
> against hidden symbol `yr_modules_table' can not be used when making a 
> shared object
> /usr/bin/ld: /usr/local/lib/libyara.a(object.o): relocation R_X86_64_32S 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(parser.o): relocation R_X86_64_32 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(proc.o): relocation R_X86_64_32S 
> against symbol `yr_process_get_first_memory_block' can not be used when 
> making a shared object; recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(re.o): relocation R_X86_64_32S 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(re_grammar.o): relocation 
> R_X86_64_32S against `.rodata' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(re_lexer.o): relocation R_X86_64_32 
> against `.rodata.str1.8' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(rules.o): relocation R_X86_64_32S 
> against `.text' can not be used when making a shared object; recompile with 
> -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(scan.o): relocation R_X86_64_32 
> against `.rodata' can not be used when making a shared object; recompile 
> with -fPIC
> /usr/bin/ld: /usr/local/lib/libyara.a(scanner.o): relocation R_X86_64_32S 
> against undefined hidden symbol `exc_jmp_buf' can not be used when making a 
> shared object
> /usr/bin/ld: /usr/local/lib/libyara.a(linux.o): relocation R_X86_64_32 
> against `.rodata.str1.1' can not be used when making a shared object; 
> recompile with -fPIC
> /usr/bin/ld: final link failed: Nonrepresentable section on output
> collect2: error: ld returned 1 exit status
> make[1]: *** [yara_enclave.so] Error 1
> make: *** [all] Error 2
>
> 11:34:02 Build Failed. 36 errors, 0 warnings. (took 369ms)
>
> I started reading more about Position Independent Code and looked at the 
> yara Makefile to insert -fPIC in the flags area, but I probably did that 
> incorrectly.  Do these errors mean I need to recompile yara to generate 
> position independent code?  If so, what should I modify in the 
> makefile/build process to produce a position independent version?
>
> The auto-generated SGX makefile which produced the errors is below.  Note 
> that all I've done is attach yara references at the end of 
> "Yara_enclave_Link_Flags" with:    
>
> -L/usr/local/lib \
> -Wl,--whole-archive -lyara
>
>
> ***********************************************************************************************************************************************************************************
> ######## Intel(R) SGX SDK Settings ########
> SGX_SDK ?= /opt/intel/sgxsdk
> SGX_MODE ?= SIM
> SGX_ARCH ?= x64
>
> ifeq ($(shell getconf LONG_BIT), 32)
>     SGX_ARCH := x86
> else ifeq ($(findstring -m32, $(CXXFLAGS)), -m32)
>     SGX_ARCH := x86
> endif
>
> ifeq ($(SGX_ARCH), x86)
>     SGX_COMMON_CFLAGS := -m32
>     SGX_LIBRARY_PATH := $(SGX_SDK)/lib
>     SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x86/sgx_sign
>     SGX_EDGER8R := $(SGX_SDK)/bin/x86/sgx_edger8r
> else
>     SGX_COMMON_CFLAGS := -m64
>     SGX_LIBRARY_PATH := $(SGX_SDK)/lib64
>     SGX_ENCLAVE_SIGNER := $(SGX_SDK)/bin/x64/sgx_sign
>     SGX_EDGER8R := $(SGX_SDK)/bin/x64/sgx_edger8r
> endif
>
> ifeq ($(SGX_DEBUG), 1)
> ifeq ($(SGX_PRERELEASE), 1)
> $(error Cannot set SGX_DEBUG and SGX_PRERELEASE at the same time!!)
> endif
> endif
>
> ifeq ($(SGX_DEBUG), 1)
>         SGX_COMMON_CFLAGS += -O0 -g
> else
>         SGX_COMMON_CFLAGS += -O2
> endif
>
> ifneq ($(SGX_MODE), HW)
>     Trts_Library_Name := sgx_trts_sim
>     Service_Library_Name := sgx_tservice_sim
> else
>     Trts_Library_Name := sgx_trts
>     Service_Library_Name := sgx_tservice
> endif
>
> Crypto_Library_Name := sgx_tcrypto
>
> Yara_enclave_C_Files := trusted/yara_enclave.c 
> Yara_enclave_Include_Paths := -IInclude -Itrusted -I$(SGX_SDK)/include 
> -I$(SGX_SDK)/include/tlibc -I$(SGX_SDK)/include/libcxx -I/usr/local/include
>
> Flags_Just_For_C := -Wno-implicit-function-declaration -std=c11
> Common_C_Cpp_Flags := $(SGX_COMMON_CFLAGS) -nostdinc -fvisibility=hidden 
> -fpie -fstack-protector $(Yara_enclave_Include_Paths) -fno-builtin-printf 
> -I. 
> Yara_enclave_C_Flags := $(Flags_Just_For_C) $(Common_C_Cpp_Flags)
>
> Yara_enclave_Link_Flags := $(SGX_COMMON_CFLAGS) -Wl,--no-undefined 
> -nostdlib -nodefaultlibs -nostartfiles -L$(SGX_LIBRARY_PATH) \
>     -Wl,--whole-archive -l$(Trts_Library_Name) -Wl,--no-whole-archive \
>     -Wl,--start-group -lsgx_tstdc -lsgx_tcxx -l$(Crypto_Library_Name) 
> -l$(Service_Library_Name) -Wl,--end-group \
>     -Wl,-Bstatic -Wl,-Bsymbolic -Wl,--no-undefined \
>     -Wl,-pie,-eenclave_entry -Wl,--export-dynamic  \
>     -Wl,--defsym,__ImageBase=0 \
>     -Wl,--version-script=trusted/yara_enclave.lds \
>     -L/usr/local/lib \
>     -Wl,--whole-archive -lyara
>
> Yara_enclave_C_Objects := $(Yara_enclave_C_Files:.c=.o)
>
> ifeq ($(SGX_MODE), HW)
> ifneq ($(SGX_DEBUG), 1)
> ifneq ($(SGX_PRERELEASE), 1)
> Build_Mode = HW_RELEASE
> endif
> endif
> endif
>
>
> .PHONY: all run
>
> ifeq ($(Build_Mode), HW_RELEASE)
> all: yara_enclave.so
>     @echo "Build enclave yara_enclave.so [$(Build_Mode)|$(SGX_ARCH)] 
> success!"
>     @echo
>     @echo 
> "*********************************************************************************************************************************************************"
>     @echo "PLEASE NOTE: In this mode, please sign the yara_enclave.so 
> first using Two Step Sign mechanism before you run the app to launch and 
> access the enclave."
>     @echo 
> "*********************************************************************************************************************************************************"
>     @echo
> else
> all: yara_enclave.signed.so
> endif
>
> run: all
> ifneq ($(Build_Mode), HW_RELEASE)
>     @$(CURDIR)/app
>     @echo "RUN  =>  app [$(SGX_MODE)|$(SGX_ARCH), OK]"
> endif
>
>
> ######## yara_enclave Objects ########
>
> trusted/yara_enclave_t.c: $(SGX_EDGER8R) ./trusted/yara_enclave.edl
>     @cd ./trusted && $(SGX_EDGER8R) --trusted ../trusted/yara_enclave.edl 
> --search-path ../trusted --search-path $(SGX_SDK)/include
>     @echo "GEN  =>  $@"
>
> trusted/yara_enclave_t.o: ./trusted/yara_enclave_t.c
>     @$(CC) $(Yara_enclave_C_Flags) -c $< -o $@
>     @echo "CC   <=  $<"
>
> trusted/%.o: trusted/%.c
>     @$(CC) $(Yara_enclave_C_Flags) -c $< -o $@
>     @echo "CC  <=  $<"
>
> yara_enclave.so: trusted/yara_enclave_t.o $(Yara_enclave_C_Objects)
>     @$(CXX) $^ -o $@ $(Yara_enclave_Link_Flags)
>     @echo "LINK =>  $@"
>
> yara_enclave.signed.so: yara_enclave.so
>     @$(SGX_ENCLAVE_SIGNER) sign -key trusted/yara_enclave_private.pem 
> -enclave yara_enclave.so -out $@ -config trusted/yara_enclave.config.xml
>     @echo "SIGN =>  $@"
> clean:
>     @rm -f yara_enclave.* trusted/yara_enclave_t.*  
> $(Yara_enclave_C_Objects)
>
> ******************************
>
> *****************************************************************************************************************************************************
>

-- 
You received this message because you are subscribed to the Google Groups 
"YARA" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to yara-project+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to