diff --git a/Dockerfile b/Dockerfile index c7fb116..620b80a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -45,6 +45,8 @@ RUN git clone https://github.com/dahut87/finalcut.git WORKDIR /usr/src/finalcut RUN autoreconf --install --force && ./configure --prefix=/usr && make && make install +RUN apk --no-cache add zlib-dev + RUN adduser -D -H -u 502 utilisateur RUN adduser -D -H -u 1000 utilisateurs RUN mkdir /data diff --git a/Makefile b/Makefile index 7265473..97f2fad 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CC=g++ -O2 -LFLAGS=-lfinal -lkeystone -lstdc++ -lm -lcapstone -lunicorn +LFLAGS=-lfinal -lkeystone -lstdc++ -lm -lcapstone -lunicorn -lz OPTIONS=-std=c++17 DOCKER=docker run -it -e COLUMNS="$$(tput cols)" -e LINES="$$(tput lines)" --name maker --rm -v $$(pwd):/data maker XTERM=terminator -f -e diff --git a/ia86.cpp b/ia86.cpp index d2b55bb..1c2b340 100644 --- a/ia86.cpp +++ b/ia86.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "ia86.h" #include "struct_mapping/struct_mapping.h" @@ -495,7 +496,14 @@ std::string VMEngine::getFlags(int rights) uint8_t *VMEngine::getRamRaw(uint32_t address, uint32_t size) { - + uint8_t *code=new uint8_t[512]; + err = uc_mem_read(uc, address, code, size); + if (err) + { + log->append("Erreur de copie mémoire depuis la machine virtuelle"); + return NULL; + } + return code; } std::string VMEngine::getRegs(int rights) @@ -1084,7 +1092,7 @@ void Menu::refresh() { regs.set(vm.getRegs(scenario.levels[scenar.getselected()].rights)); flags.set(vm.getFlags(scenario.levels[scenar.getselected()].rights)); - //debug.setindex(vm.getEIP(code)); + //debug.setindex(vm.getEIP(code)); } if (!vm.isExecuted()) { @@ -1093,6 +1101,16 @@ void Menu::refresh() else { finalcut::FApplication::setDefaultTheme(); + eip=vm.getEIP()-256; + if (eip<0) eip=0x00000000; + code=vm.getRamRaw(eip, 512); + crc = crc32(0, code, 512); + if (crc != oldcrc || eip != oldeip) + { + debug.set(unasmer.Desassemble(code, eip,512)); + oldcrc=crc; + oldeip=eip; + } } auto root_widget = getRootWidget(); root_widget->resetColors(); diff --git a/ia86.h b/ia86.h index 04085be..12ade77 100644 --- a/ia86.h +++ b/ia86.h @@ -309,6 +309,9 @@ class Menu final : public finalcut::FDialog void loadLevel(); TextWindow log{this}; private: + int eip,oldeip; + uint8_t *code; + uLong crc,oldcrc; void onTimer (finalcut::FTimerEvent*) override; void refresh(); void configureFileMenuItems();