Skip to content
Snippets Groups Projects
Commit 1fde015d authored by Jason Hiser's avatar Jason Hiser :tractor:
Browse files

Merge branch 'master' of git.zephyr-software.com:allnp/security_transforms

Former-commit-id: bbc5bdfea60d7a6115980224c2d4e472d731d059
parents 5155b8fa 5b46e064
No related branches found
No related tags found
No related merge requests found
......@@ -61,8 +61,13 @@ if "CYGWIN" in sysname:
Export('env')
env.Install("$SECURITY_TRANSFORMS_HOME/lib/", "$SECURITY_TRANSFORMS_HOME/libcapstone/libcapstone.so.4")
env.Command(os.environ['SECURITY_TRANSFORMS_HOME']+"/lib/libcapstone.so", os.environ['SECURITY_TRANSFORMS_HOME']+"/lib/libcapstone.so.4", "ln -s $SOURCE.abspath $TARGET.abspath")
# get the libcapstone.so.[version] file regardless of the version extension
libcapstone_path = Glob(os.environ['SECURITY_TRANSFORMS_HOME']+'/libcapstone/libcapstone.so.*')
assert len(libcapstone_path) <= 1, "More than one candidate for libcapstone.so.[version]?!"
libcapstone_path = env.Install("$SECURITY_TRANSFORMS_HOME/lib/", libcapstone_path)
env.Command(os.environ['SECURITY_TRANSFORMS_HOME']+"/lib/libcapstone.so", libcapstone_path, "ln -s $SOURCE.abspath $TARGET.abspath")
libcapstone=os.environ['SECURITY_TRANSFORMS_HOME']+"/lib/libcapstone.so"
libehp=env.SConscript("libehp/SConscript", variant_dir='scons_build/libehp')
......
......@@ -1284,6 +1284,9 @@ void SCFI_Instrument::add_got_entry(const std::string& name)
auto relaplt_scoop=find_scoop(firp,".rela.dyn coalesced w/.rela.plt");
auto relplt_scoop=find_scoop(firp,".rel.dyn coalesced w/.rel.plt");
auto relscoop=relaplt_scoop!=NULL ? relaplt_scoop : relplt_scoop;
auto gnu_version_scoop=find_scoop(firp,".gnu.version");
assert(gnu_version_scoop);
assert(gnu_version_scoop->getStart()->getVirtualOffset()==0);
// add 0-init'd pointer to table
string new_got_entry_str(ptrsize,0); // zero-init a pointer-sized string
......@@ -1319,6 +1322,10 @@ void SCFI_Instrument::add_got_entry(const std::string& name)
string dl_sym_str((const char*)&dl_sym, sizeof(T_Elf_Sym));
unsigned int dl_pos=add_to_scoop(dl_sym_str,dynsym_scoop);
// update the gnu.version section so that the new symbol has a version.
const auto new_version_str=string("\0\0", 2); // \0\0 means *local*, as in, don't index the gnu.verneeded array.
add_to_scoop(new_version_str,gnu_version_scoop);
// find the rela count. can't insert before that.
int rela_count=0;
for(int i=0;i+sizeof(T_Elf_Dyn)<dynamic_scoop->getSize(); i+=sizeof(T_Elf_Dyn))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment