我正在编写代码混淆工具作为我的硕士论文的一部分,并且遇到了一些问题。试图在libemu中使用emu_instruction提供前向声明错误
我使用libemu模拟x86指令,我想读取包含十六进制代码的输入文件并将指令存储在向量中。在libemu中,指令由struct emu_instruction
表示,我也想在我的程序中使用这个结构,因为libemu也提供了一个解析器。这是我想使用它:
emulator.cpp
std::vector<struct emu_instruction*> Emulator::getInstructionVector()
{
std::vector<struct emu_instruction*> v;
//e is my struct emu*
while(emu_cpu_parse(emu_cpu_get(e))) {
v.push_back(&emu_cpu_get(e)->instr);
}
return v;
}
emulator.h(我改变了进口路径)
#ifndef EMULATOR_H
#define EMULATOR_H
#include <vector>
extern "C" {
#include "~/libemu/libemu/include/emu/emu.h"
#include "~/libemu/libemu/include/emu/emu_memory.h"
#include "~/libemu/libemu/include/emu/emu_cpu.h"
#include "~/libemu/libemu/include/emu/emu_log.h"
#include "~/libemu/libemu/include/emu/emu_instruction.h"
}
class Emulator {
public:
Emulator();
~Emulator();
void loadProgramInMemory(unsigned char instructionBytes[], int instructionBytesLen);
std::vector<struct emu_instruction*> getInstructionVector();
int runAndGetEFlags();
void printDebug();
private:
struct emu *e;
struct emu_memory *mem;
int static_offset;
};
#endif
我不得不改变在emu_instruction进口路径使其编译。
试图运行这段代码时,我得到的错误是
emulator.cpp: In member function ‘std::vector<emu_instruction*> Emulator::getInstructionVector()’: emulator.cpp:29:29: error: invalid use of incomplete type ‘struct emu_cpu’ ~/libemu/libemu/include/emu/emu.h:45:8: error: forward declaration of ‘struct emu_cpu’
在这一点上,我不知道该怎么办,因为我不完全理解的错误。任何帮助,将不胜感激。
添加makefile。
的Makefile:
CXX = g++
CC = g++
SRC = $(wildcard *.cpp)
OBJ = $(SRC:.cpp=.o)
# Executables
PROGS = program
all: $(PROGS)
program: program.o parser.o instruction.o emulator.o /home/user/libemu/libemu/src/.libs/libemu.a
$(CXX) $(CXXFLAGS) program.o parser.o instruction.o emulator.o /home/user/libemu/libemu/src/.libs/libemu.a -ludis86 -o program.out
parser: parser.o instruction.o
$(CXX) $(CXXFLAGS) parser.o instruction.o -ludis86
clean:
rm -f *.o
cleaner: clean
rm -f $(PROGS) *.out
%.d: %.cpp
@set -e; rm -f [email protected]; \
$(CXX) -MM $(CXXFLAGS) $< > [email protected]$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o [email protected] : ,g' < [email protected]$$$$ > [email protected]; \
rm -f [email protected]$$$$
第29行是'v.push_back(&emu_cpu_get(e) - > instr);'我还添加了我的Makefile,我不知道如何添加你在使用make时不幸提示的内容。 – user3374384
在makefile头部定义了'CXXFLAGS = -I/home/user/libemu/libemu/include' –