1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142
|
Description: Use libdisasm, as libudis86 isn't yet in Debian.
Last-Update: 2018-03-12
--- a/src/HexEditorGui.cpp
+++ b/src/HexEditorGui.cpp
@@ -672,15 +672,6 @@
wxBoxSizer* bSizerTop;
bSizerTop = new wxBoxSizer( wxHORIZONTAL );
- wxString m_choiceVendorChoices[] = { _("INTEL"), _("AMD") };
- int m_choiceVendorNChoices = sizeof( m_choiceVendorChoices ) / sizeof( wxString );
- m_choiceVendor = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceVendorNChoices, m_choiceVendorChoices, 0 );
- m_choiceVendor->SetSelection( 0 );
- m_choiceVendor->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) );
- m_choiceVendor->SetToolTip( _("CPU Vendor") );
-
- bSizerTop->Add( m_choiceVendor, 1, wxTOP|wxRIGHT|wxLEFT, 5 );
-
wxString m_choiceASMTypeChoices[] = { _("INTEL"), _("AT&T") };
int m_choiceASMTypeNChoices = sizeof( m_choiceASMTypeChoices ) / sizeof( wxString );
m_choiceASMType = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceASMTypeNChoices, m_choiceASMTypeChoices, 0 );
@@ -689,15 +680,6 @@
bSizerTop->Add( m_choiceASMType, 1, wxTOP|wxRIGHT|wxLEFT, 5 );
- wxString m_choiceBitModeChoices[] = { _("16 Bit"), _("32 Bit"), _("64 Bit") };
- int m_choiceBitModeNChoices = sizeof( m_choiceBitModeChoices ) / sizeof( wxString );
- m_choiceBitMode = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_choiceBitModeNChoices, m_choiceBitModeChoices, 0 );
- m_choiceBitMode->SetSelection( 1 );
- m_choiceBitMode->SetToolTip( _("Disassembly Bit Mode") );
-
- bSizerTop->Add( m_choiceBitMode, 1, wxTOP|wxRIGHT|wxLEFT, 5 );
-
-
mainSizer->Add( bSizerTop, 0, wxEXPAND, 5 );
m_dasmCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_DONTWRAP|wxTE_MULTILINE|wxTE_READONLY );
@@ -708,17 +690,13 @@
this->Layout();
// Connect Events
- m_choiceVendor->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DisassemblerPanelGUI::OnUpdate ), NULL, this );
m_choiceASMType->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DisassemblerPanelGUI::OnUpdate ), NULL, this );
- m_choiceBitMode->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DisassemblerPanelGUI::OnUpdate ), NULL, this );
}
DisassemblerPanelGUI::~DisassemblerPanelGUI()
{
// Disconnect Events
- m_choiceVendor->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DisassemblerPanelGUI::OnUpdate ), NULL, this );
m_choiceASMType->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DisassemblerPanelGUI::OnUpdate ), NULL, this );
- m_choiceBitMode->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DisassemblerPanelGUI::OnUpdate ), NULL, this );
}
--- a/src/HexPanels.cpp
+++ b/src/HexPanels.cpp
@@ -393,14 +393,26 @@
}
void DisassemblerPanel::OnUpdate( wxCommandEvent& event){
- ud_t ud_obj;
- ud_init(&ud_obj);
- ud_set_input_buffer(&ud_obj, reinterpret_cast<uint8_t*>(mybuff.GetData()), mybuff.GetDataLen() );
- ud_set_vendor(&ud_obj, (m_choiceVendor->GetSelection()) ? UD_VENDOR_AMD : UD_VENDOR_INTEL);
- ud_set_mode(&ud_obj, (m_choiceBitMode->GetSelection()+1)*16);
- ud_set_syntax(&ud_obj, (m_choiceASMType->GetSelection() ? UD_SYN_ATT : UD_SYN_INTEL ));
+ x86_insn_t insn;
+ int pos = 0;
+ int len = mybuff.GetDataLen();
+ uint8_t * buf = reinterpret_cast<uint8_t*>(mybuff.GetData());
+
+ x86_init(opt_none, NULL, NULL);
+ x86_disasm(reinterpret_cast<uint8_t*>(mybuff.GetData()), mybuff.GetDataLen(), 0, pos, &insn);
wxString mydasm;
- while (ud_disassemble(&ud_obj))
- mydasm << wxString::FromAscii( ud_insn_asm(&ud_obj) ) << wxT("\n");
+
+ while (pos < len) {
+ int size = x86_disasm(buf, len, 0, pos, &insn);
+ if (size) {
+ char line[256];
+ x86_format_insn(&insn, line, sizeof(line), (m_choiceASMType->GetSelection() ? att_syntax : intel_syntax ));
+ mydasm << wxString::FromAscii(line) << wxT("\n");
+ pos += size;
+ } else {
+ mydasm << wxT("<invalid instruction>\n");
+ pos++;
+ }
+ }
m_dasmCtrl->ChangeValue( mydasm );
}
--- a/src/HexPanels.h
+++ b/src/HexPanels.h
@@ -27,7 +27,7 @@
#include "HexEditorFrame.h"
#include "HexEditorCtrl/HexEditorCtrl.h"
#include "HexEditorCtrl/wxHexCtrl/wxHexCtrl.h"
-#include "../udis86/udis86.h"
+#include <libdis.h>
#ifdef WX_GCH
#include <wx_pch.h>
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
WXCONFIG ?= wx-config
HOST=
-WXCXXFLAGS= `$(WXCONFIG) --cxxflags` -Iudis86 -MMD -fopenmp -Wall -O2
+WXCXXFLAGS= `$(WXCONFIG) --cxxflags` -MMD -fopenmp -Wall -O2
WXLDFLAGS = `$(WXCONFIG) --libs` `$(WXCONFIG) --libs aui` `$(WXCONFIG) --libs core`
WXCXXFLAGS += -fopenmp
LDFLAGS += -lgomp
@@ -22,7 +22,7 @@
src/HexEditorCtrl/wxHexCtrl/Tag.cpp\
src/HexEditorCtrl/HexEditorCtrlGui.cpp\
src/HexEditorFrame.cpp
-LIBS = -lmhash
+LIBS = -ldisasm -lmhash
OBJECTS=$(SOURCES:.cpp=.o)
DEPENDS=$(OBJECTS:.o=.d)
LANGUAGEDIRS=`ls -l ./locale | grep ^d | sed s/.*\ //g;`
@@ -68,11 +68,6 @@
%.mo : %.po
$(MSGFMT) $< -o $@
-udis86/libudis86/.libs/libudis86.a:
- cd udis86;./autogen.sh
- cd udis86;./configure --host=$(HOST) CC="$(CC)" CXX="$(CXX)" CFLAGS="$(CFLAGS) ${OPTFLAGS}" CXXFLAGS="$(CXXFLAGS) ${OPTFLAGS}" CPPFLAGS="$(CPPFLAGS)"
- cd udis86/libudis86; $(MAKE) $(MFLAGS)
-
src/windrv.o:
$(CXX) $(LIBS) ${CXXFLAGS} ${OPTFLAGS} $(WXCXXFLAGS) $(WXLDFLAGS) ${LDFLAGS} -c src/windrv.cpp -o src/windrv.o
@@ -188,7 +183,6 @@
rm -rf $(EXECUTABLE_DIR_MAC)
rm -f locale/*/wxHexEditor.mo
distclean: clean
- cd udis86;$(MAKE) distclean
# include the auto-generated dependency files
-include $(DEPENDS)
|