示例#1
0
void assemble_variable(Assembler a, Element e) {
  //FLD DWORD PTR [EDI + varnum * 4]

  if( e.varnum < 32 ) { //Byte displacement
    insertCode(a, "\xD9\x47", 2);
    insertCodeByte(a, (e.varnum * 4) & 0xFF );
  } else { //Dword displacement
    int tmp = e.varnum * 4;
    insertCode(a, "\xD9\x87", 2);
    insertCode(a, &tmp, 4 );
  }
}
示例#2
0
void assemble_constant(Assembler a, Element e) {
  //FLD dword [EBX + delta]

  char *ptr = insertData(a, &e.f, 4 );
  int delta = ( (int) ptr ) - ((int) a->end );

  if ( delta > -127 ) { //Byte displacement
    insertCode(a, "\xD9\x43", 2);
    insertCodeByte(a, delta & 0xFF );
  } else { //Dword displacement
    insertCode(a, "\xD9\x83", 2);
    insertCode(a, &delta, 4 );
  }
}
示例#3
0
void assemble_ifunc_min(Assembler a, Element e) {
  //FUCOMI st1
  //FCMOVNB st1
  //FSTP st1

  insertCode(a, "\xDB\xE9\xDB\xC1\xDD\xD9", 6);
}
示例#4
0
void assemble_ifunc_max(Assembler a, Element e) {
  //FUCOMI st1
  //FCMOVB st1
  //FFREE st1

  insertCode(a, "\xDB\xE9\xDA\xC1\xDD\xD9", 6);
}
示例#5
0
void finishAssembly(Assembler a) {
  //POP EDI
  //POP EBX
  //#LEAVE
  //RET

  //insertCode(a, "\x5F\x5B\xC9\xC3", 4 );
  insertCode(a, "\x5F\x5B\xC3", 3 );
}
示例#6
0
void beginAssembly(Assembler a) {
  a->pos = a->base;
  a->data = a->end;

  //#PUSH EBP
  //#MOV EBP, ESP
  //PUSH EBX
  //PUSH EDI
  //MOV EBX, a->data
  //#MOV EDI, DWORD PTR [EBP + 0x08]
  //MOV EDI, DWORD PTR [ESP + 0x0C]

  /*insertCode(a, "\x55\x89\xE5\x53\x57\xBB", 6);
    insertCode(a, &a->data, 4 );
    insertCode(a, "\x8B\x7D\x08", 3);*/

  insertCode(a, "\x53\x57\xBB", 3);
  insertCode(a, &a->data, 4 );
  insertCode(a, "\x8B\x7C\x24\x0C", 4);
}
SpecialCharDialog::SpecialCharDialog( QWidget* parent, const char* name, bool modal, WFlags fl)
    :SpecialCharDialogS( parent, name, modal, fl )
{
  connect ( FilterLineEdit, SIGNAL(textChanged(const QString&)), 
      SLOT(filterChars(const QString&)) );
  connect ( CharsListBox, SIGNAL(doubleClicked(QListBoxItem*)), 
      SLOT(insertCode()) );
  connect (buttonOk, SIGNAL(clicked()), SLOT(insertCode()));
  connect (buttonChar, SIGNAL(clicked()), SLOT(insertChar()));
  connect (buttonCancel, SIGNAL(clicked()), SLOT(cancel()));
  filterChars("");
}
示例#8
0
void assemble_ifunc_abs(Assembler a, Element e) {
  //FABS

  insertCode(a, "\xD9\xE1", 2);
}
示例#9
0
void assemble_ifunc_cos(Assembler a, Element e) {
  //FCOS

  insertCode(a, "\xD9\xFF", 2);
}
示例#10
0
void assemble_ifunc_sin(Assembler a, Element e) {
  //FSIN

  insertCode(a, "\xD9\xFE", 2);
}
示例#11
0
void assemble_op_sub(Assembler a, Element e) {
  //SUBP st1

  insertCode(a, "\xDE\xE9", 2);
}
示例#12
0
void assemble_op_div(Assembler a, Element e) {
  //DIVP st1

  insertCode(a, "\xDE\xF9", 2);
}
示例#13
0
void assemble_op_mul(Assembler a, Element e) {
  //MULP st1

  insertCode(a, "\xDE\xC9", 2);
}
示例#14
0
void assemble_op_add(Assembler a, Element e) {
  //ADDP st1

  insertCode(a, "\xDE\xC1", 2);
}