Skip to content
Snippets Groups Projects
Commit 47f979e9 authored by whh8b's avatar whh8b
Browse files

Update memory space to include RemoveFreeRange()

parent abf62b06
No related branches found
No related tags found
No related merge requests found
......@@ -25,8 +25,8 @@ src/plugin_man.cpp -text
src/zipr.cpp -text
src/zipr_options.cpp -text
src/zipr_stats.cpp -text
test/Makefile.in -text
test/MemorySpace.cpp -text
test/SConstruct -text
test/dylib/Makefile -text
test/dylib/dylib.c -text
test/dylib/dylib.h -text
......
......@@ -21,5 +21,4 @@ SConscript(sectrans_sconscript, variant_dir='scons_build/irdb_libs')
#print 'env='
#print env.Dump()
SConscript("src/SConscript", variant_dir='scons_build/zipr')
SConscript("test/SConscript")
......@@ -48,6 +48,7 @@ class ZiprMemorySpace_t : public MemorySpace_t
std::set<Range_t>::iterator FindFreeRange(RangeAddress_t addr);
Range_t GetFreeRange(int size);
void AddFreeRange(Range_t newRange);
void RemoveFreeRange(Range_t newRange);
// queries about free areas.
bool AreBytesFree(RangeAddress_t addr, int num_bytes);
......
......@@ -198,6 +198,11 @@ void ZiprMemorySpace_t::AddFreeRange(Range_t newRange)
{
free_ranges.insert(Range_t(newRange.GetStart(), newRange.GetEnd()));
}
void ZiprMemorySpace_t::RemoveFreeRange(Range_t oldRange)
{
free_ranges.erase(Range_t(oldRange.GetStart(), oldRange.GetEnd()));
}
int ZiprMemorySpace_t::GetRangeCount()
{
return free_ranges.size();
......
......@@ -1527,7 +1527,7 @@ RangeAddress_t Zipr_t::PlopWithTarget(Instruction_t* insn, RangeAddress_t at)
void Zipr_t::RewritePCRelOffset(RangeAddress_t from_addr,RangeAddress_t to_addr, int insn_length, int offset_pos)
{
int new_offset=to_addr-from_addr-insn_length;
int new_offset=((unsigned int)to_addr)-((unsigned int)from_addr)-((unsigned int)insn_length);
memory_space[from_addr+offset_pos+0]=(new_offset>>0)&0xff;
memory_space[from_addr+offset_pos+1]=(new_offset>>8)&0xff;
......
INC=-I../include -I../third_party/ELFIO/elfio-2.2 -I$(SECURITY_TRANSFORMS_HOME)/include -I$(SECURITY_TRANSFORMS_HOME)/libIRDB/include -I$(SECURITY_TRANSFORMS_HOME)/beaengine/include -I${SECURITY_TRANSFORMS_HOME}/tools/transforms/
SRCS=MemorySpace.cpp ../src/zipr_options.cpp ../src/memory_space.cpp
OBJS=$(subst .cpp,.o, $(SRCS))
EXE=MemoryTest.exe
CXX=@CXX@
CXXFLAGS=@CXXFLAGS@ @OPTIMIZE@
LDFLAGS=-L$(SECURITY_TRANSFORMS_HOME)/lib -Wl,-E
LIBS=-lIRDB-core -lBeaEngine_s_d -lpqxx -lpq
all: $(EXE)
-include $(OBJS:.o=.d)
$(EXE): $(OBJS)
g++ $(LDFLAGS) $(OBJS) $(LIBS) -o $@
%.o: %.cpp
$(CXX) -c $(CXXFLAGS) $*.cpp -o $@
@#
@# build dependencies -- http://scottmcpeak.com/autodepend/autodepend.html
@#
$(CXX) -MM $(CXXFLAGS) $*.cpp > $*.d
@cp -f $*.d $*.d.tmp
@sed -e 's/.*://' -e 's/\\$$//' < $*.d.tmp | fmt -1 | sed -e 's/^ *//' -e 's/$$/:/' >> $*.d
@rm -f $*.d.tmp
clean:
rm -f $(OBJS) $(EXE) *.d *.o
......@@ -164,6 +164,28 @@ bool TestSort()
return true;
}
bool TestInsertRemoveFreeRange()
{
ZiprOptions_t opts;
opts.SetVerbose(true);
ZiprMemorySpace_t m(&opts);
m.AddFreeRange(Range_t(256, 512));
m.AddFreeRange(Range_t(513, 1024));
m.AddFreeRange(Range_t(1025, 4096));
m.PrintMemorySpace(cout);
if (m.GetRangeCount() != 3)
return false;
m.RemoveFreeRange(Range_t(513, 1024));
if (m.GetRangeCount() != 2)
return false;
m.PrintMemorySpace(cout);
m.RemoveFreeRange(Range_t(256, 512));
m.RemoveFreeRange(Range_t(1025, 4096));
m.PrintMemorySpace(cout);
return (m.GetRangeCount() == 0);
}
bool TestMergeFreeRange()
{
ZiprOptions_t opts;
......@@ -220,4 +242,5 @@ int main(int argc, char *argv[])
INVOKE(TestSort);
INVOKE(TestBinarySearch);
INVOKE(TestBinarySearchMaxRange);
INVOKE(TestInsertRemoveFreeRange);
}
env=Environment()
Export('env')
SConscript("SConscript")
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