Added libdisasm to 3rd_party.
Started the move of 'prog' global into Project.
This commit is contained in:
20
include/BinaryImage.h
Normal file
20
include/BinaryImage.h
Normal file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
#include <stdint.h>
|
||||
struct PROG /* Loaded program image parameters */
|
||||
{
|
||||
int16_t initCS;
|
||||
int16_t initIP; /* These are initial load values */
|
||||
int16_t initSS; /* Probably not of great interest */
|
||||
uint16_t initSP;
|
||||
bool fCOM; /* Flag set if COM program (else EXE)*/
|
||||
int cReloc; /* No. of relocation table entries */
|
||||
uint32_t * relocTable; /* Ptr. to relocation table */
|
||||
uint8_t * map; /* Memory bitmap ptr */
|
||||
int cProcs; /* Number of procedures so far */
|
||||
int offMain; /* The offset of the main() proc */
|
||||
uint16_t segMain; /* The segment of the main() proc */
|
||||
bool bSigs; /* True if signatures loaded */
|
||||
int cbImage; /* Length of image in bytes */
|
||||
uint8_t * Image; /* Allocated by loader to hold entire program image */
|
||||
};
|
||||
|
||||
@@ -84,6 +84,7 @@ enum eLLFlags
|
||||
JMP_ICODE =0x1000000, /* Jmp dest immed.op converted to icode index */
|
||||
JX_LOOP =0x2000000, /* Cond jump is part of loop conditional exp */
|
||||
REST_STK =0x4000000 /* Stack needs to be restored after CALL */
|
||||
#define ICODEMASK 0x0FF00FF /* Masks off parser flags */
|
||||
};
|
||||
/* Types of icodes */
|
||||
enum icodeType
|
||||
|
||||
@@ -61,24 +61,7 @@ typedef struct { /* Command line option flags */
|
||||
|
||||
extern OPTION option; /* Command line options */
|
||||
|
||||
struct PROG /* Loaded program image parameters */
|
||||
{
|
||||
int16_t initCS;
|
||||
int16_t initIP; /* These are initial load values */
|
||||
int16_t initSS; /* Probably not of great interest */
|
||||
uint16_t initSP;
|
||||
bool fCOM; /* Flag set if COM program (else EXE)*/
|
||||
int cReloc; /* No. of relocation table entries */
|
||||
uint32_t * relocTable; /* Ptr. to relocation table */
|
||||
uint8_t * map; /* Memory bitmap ptr */
|
||||
int cProcs; /* Number of procedures so far */
|
||||
int offMain; /* The offset of the main() proc */
|
||||
uint16_t segMain; /* The segment of the main() proc */
|
||||
bool bSigs; /* True if signatures loaded */
|
||||
int cbImage; /* Length of image in bytes */
|
||||
uint8_t * Image; /* Allocated by loader to hold entire
|
||||
* program image */
|
||||
};
|
||||
#include "BinaryImage.h"
|
||||
|
||||
extern PROG prog; /* Loaded program image parameters */
|
||||
extern std::bitset<32> duReg[30]; /* def/use bits for registers */
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <bitset>
|
||||
|
||||
/* Machine registers */
|
||||
enum eReg
|
||||
{
|
||||
@@ -42,11 +43,21 @@ enum eReg
|
||||
INDEX_BX, // "bx"
|
||||
LAST_REG
|
||||
};
|
||||
class SourceMachine
|
||||
{
|
||||
public:
|
||||
// virtual bool physicalReg(eReg r)=0;
|
||||
|
||||
class Machine_X86
|
||||
};
|
||||
//class Machine_X86_Disassembler
|
||||
//{
|
||||
// void formatRM(std::ostringstream &p, uint32_t flg, const LLOperand &pm);
|
||||
//};
|
||||
class Machine_X86 : public SourceMachine
|
||||
{
|
||||
public:
|
||||
Machine_X86();
|
||||
virtual ~Machine_X86() {}
|
||||
static const std::string ®Name(eReg r);
|
||||
static const std::string &opcodeName(unsigned r);
|
||||
static const std::string &floatOpName(unsigned r);
|
||||
@@ -67,4 +78,5 @@ public:
|
||||
|
||||
static bool isMemOff(eReg r);
|
||||
static bool isSubRegisterOf(eReg reg, eReg parent);
|
||||
|
||||
};
|
||||
|
||||
@@ -5,7 +5,9 @@
|
||||
#include <list>
|
||||
#include <llvm/ADT/ilist.h>
|
||||
#include "symtab.h"
|
||||
#include "BinaryImage.h"
|
||||
struct Function;
|
||||
struct SourceMachine;
|
||||
struct CALL_GRAPH;
|
||||
|
||||
typedef llvm::iplist<Function> FunctionListType;
|
||||
@@ -20,6 +22,7 @@ struct Project
|
||||
std::string m_fname;
|
||||
FunctionListType pProcList;
|
||||
CALL_GRAPH * callGraph; /* Pointer to the head of the call graph */
|
||||
PROG prog; /* Loaded program image parameters */
|
||||
Project() {}
|
||||
// no copies
|
||||
Project(const Project&) = delete;
|
||||
@@ -51,7 +54,6 @@ struct Project
|
||||
return *this;
|
||||
}
|
||||
|
||||
static Project *get();
|
||||
public:
|
||||
ilFunction funcIter(Function *to_find);
|
||||
ilFunction findByEntry(uint32_t entry);
|
||||
@@ -65,6 +67,10 @@ public:
|
||||
const std::string &symbolName(size_t idx);
|
||||
const SYM &getSymByIdx(size_t idx) const;
|
||||
|
||||
static Project *get();
|
||||
PROG * binary() {return &prog;}
|
||||
SourceMachine *machine();
|
||||
|
||||
protected:
|
||||
void writeGlobSymTable();
|
||||
};
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
#pragma once
|
||||
/* Scanner functions
|
||||
* (C) Cristina Cifuentes, Jeff Ledermann
|
||||
*/
|
||||
|
||||
//#define LH(p) ((int)((uint8_t *)(p))[0] + ((int)((uint8_t *)(p))[1] << 8))
|
||||
#include <stdint.h>
|
||||
#include "error.h"
|
||||
/* Extracts reg bits from middle of mod-reg-rm uint8_t */
|
||||
#define REG(x) ((uint8_t)(x & 0x38) >> 3)
|
||||
|
||||
struct ICODE;
|
||||
|
||||
extern eErrorId scan(uint32_t ip, ICODE &p);
|
||||
|
||||
@@ -29,6 +29,7 @@ typedef unsigned char boolT; /* 8 bits */
|
||||
//#define LH(p) ((int16)((byte *)(p))[0] + ((int16)((byte *)(p))[1] << 8))
|
||||
#define LH(p) ((word)((byte *)(p))[0] + ((word)((byte *)(p))[1] << 8))
|
||||
|
||||
|
||||
/* Macro reads a LH word from the image regardless of host convention */
|
||||
/* Returns a signed quantity, e.g. C000 is read into an Int as FFFFC000 */
|
||||
#define LH_SIGNED(p) (((byte *)(p))[0] + (((char *)(p))[1] << 8))
|
||||
|
||||
Reference in New Issue
Block a user