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 ); } }
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 ); } }
void assemble_ifunc_min(Assembler a, Element e) { //FUCOMI st1 //FCMOVNB st1 //FSTP st1 insertCode(a, "\xDB\xE9\xDB\xC1\xDD\xD9", 6); }
void assemble_ifunc_max(Assembler a, Element e) { //FUCOMI st1 //FCMOVB st1 //FFREE st1 insertCode(a, "\xDB\xE9\xDA\xC1\xDD\xD9", 6); }
void finishAssembly(Assembler a) { //POP EDI //POP EBX //#LEAVE //RET //insertCode(a, "\x5F\x5B\xC9\xC3", 4 ); insertCode(a, "\x5F\x5B\xC3", 3 ); }
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(""); }
void assemble_ifunc_abs(Assembler a, Element e) { //FABS insertCode(a, "\xD9\xE1", 2); }
void assemble_ifunc_cos(Assembler a, Element e) { //FCOS insertCode(a, "\xD9\xFF", 2); }
void assemble_ifunc_sin(Assembler a, Element e) { //FSIN insertCode(a, "\xD9\xFE", 2); }
void assemble_op_sub(Assembler a, Element e) { //SUBP st1 insertCode(a, "\xDE\xE9", 2); }
void assemble_op_div(Assembler a, Element e) { //DIVP st1 insertCode(a, "\xDE\xF9", 2); }
void assemble_op_mul(Assembler a, Element e) { //MULP st1 insertCode(a, "\xDE\xC9", 2); }
void assemble_op_add(Assembler a, Element e) { //ADDP st1 insertCode(a, "\xDE\xC1", 2); }