File: 06-use-libdisasm.patch

package info (click to toggle)
wxhexeditor 0.24%2Brepack-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 4,588 kB
  • sloc: cpp: 13,058; ansic: 6,222; makefile: 206; python: 35; sh: 8
file content (142 lines) | stat: -rw-r--r-- 5,681 bytes parent folder | download | duplicates (2)
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)