diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4a19da5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +*.pyc +Thumbs.db diff --git a/README.md b/README.md index ce39ca1..1789699 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,6 @@ https://github.com/nccgroup/IODIDE Released under AGPL see LICENSE for more information -Includes the PowerPC disassembler from cxmon by Christian Bauer, Marc Hellwig (http://cxmon.cebix.net) - ## Documentation https://github.com/nccgroup/IODIDE/wiki @@ -22,6 +20,8 @@ https://github.com/nccgroup/IODIDE/wiki * pyserial +* capstone + ## Platforms Tested on Windows 7 \ No newline at end of file diff --git a/disass.dll b/disass.dll deleted file mode 100644 index 46c06b2..0000000 Binary files a/disass.dll and /dev/null differ diff --git a/disass_ppc/disass/Backup/disass.sln b/disass_ppc/disass/Backup/disass.sln deleted file mode 100644 index f685390..0000000 --- a/disass_ppc/disass/Backup/disass.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "disass", "disass\disass.vcproj", "{0EFAD09B-472F-4309-865E-E026D04B7966}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0EFAD09B-472F-4309-865E-E026D04B7966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0EFAD09B-472F-4309-865E-E026D04B7966}.Debug|Win32.Build.0 = Debug|Win32 - {0EFAD09B-472F-4309-865E-E026D04B7966}.Release|Win32.ActiveCfg = Release|Win32 - {0EFAD09B-472F-4309-865E-E026D04B7966}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/disass_ppc/disass/Backup/disass.v12.suo b/disass_ppc/disass/Backup/disass.v12.suo deleted file mode 100644 index f45496e..0000000 Binary files a/disass_ppc/disass/Backup/disass.v12.suo and /dev/null differ diff --git a/disass_ppc/disass/UpgradeLog.htm b/disass_ppc/disass/UpgradeLog.htm deleted file mode 100644 index 0c82660..0000000 Binary files a/disass_ppc/disass/UpgradeLog.htm and /dev/null differ diff --git a/disass_ppc/disass/debug/disass.dll b/disass_ppc/disass/debug/disass.dll deleted file mode 100644 index 9c17568..0000000 Binary files a/disass_ppc/disass/debug/disass.dll and /dev/null differ diff --git a/disass_ppc/disass/debug/disass.exe b/disass_ppc/disass/debug/disass.exe deleted file mode 100644 index 58a0791..0000000 Binary files a/disass_ppc/disass/debug/disass.exe and /dev/null differ diff --git a/disass_ppc/disass/debug/disass.exp b/disass_ppc/disass/debug/disass.exp deleted file mode 100644 index 8fec663..0000000 Binary files a/disass_ppc/disass/debug/disass.exp and /dev/null differ diff --git a/disass_ppc/disass/debug/disass.ilk b/disass_ppc/disass/debug/disass.ilk deleted file mode 100644 index 44fa5a4..0000000 Binary files a/disass_ppc/disass/debug/disass.ilk and /dev/null differ diff --git a/disass_ppc/disass/debug/disass.lib b/disass_ppc/disass/debug/disass.lib deleted file mode 100644 index 4698589..0000000 Binary files a/disass_ppc/disass/debug/disass.lib and /dev/null differ diff --git a/disass_ppc/disass/debug/disass.pdb b/disass_ppc/disass/debug/disass.pdb deleted file mode 100644 index 89c46db..0000000 Binary files a/disass_ppc/disass/debug/disass.pdb and /dev/null differ diff --git a/disass_ppc/disass/disass.ncb b/disass_ppc/disass/disass.ncb deleted file mode 100644 index 141d2cc..0000000 Binary files a/disass_ppc/disass/disass.ncb and /dev/null differ diff --git a/disass_ppc/disass/disass.sdf b/disass_ppc/disass/disass.sdf deleted file mode 100644 index 17ce641..0000000 Binary files a/disass_ppc/disass/disass.sdf and /dev/null differ diff --git a/disass_ppc/disass/disass.sln b/disass_ppc/disass/disass.sln deleted file mode 100644 index f5960e6..0000000 --- a/disass_ppc/disass/disass.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 2013 for Windows Desktop -VisualStudioVersion = 12.0.21005.1 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "disass", "disass\disass.vcxproj", "{0EFAD09B-472F-4309-865E-E026D04B7966}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0EFAD09B-472F-4309-865E-E026D04B7966}.Debug|Win32.ActiveCfg = Debug|Win32 - {0EFAD09B-472F-4309-865E-E026D04B7966}.Debug|Win32.Build.0 = Debug|Win32 - {0EFAD09B-472F-4309-865E-E026D04B7966}.Release|Win32.ActiveCfg = Release|Win32 - {0EFAD09B-472F-4309-865E-E026D04B7966}.Release|Win32.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/disass_ppc/disass/disass.suo b/disass_ppc/disass/disass.suo deleted file mode 100644 index f45496e..0000000 Binary files a/disass_ppc/disass/disass.suo and /dev/null differ diff --git a/disass_ppc/disass/disass.v12.suo b/disass_ppc/disass/disass.v12.suo deleted file mode 100644 index ec0b733..0000000 Binary files a/disass_ppc/disass/disass.v12.suo and /dev/null differ diff --git a/disass_ppc/disass/disass/Debug/BuildLog.htm b/disass_ppc/disass/disass/Debug/BuildLog.htm deleted file mode 100644 index f6af21d..0000000 Binary files a/disass_ppc/disass/disass/Debug/BuildLog.htm and /dev/null differ diff --git a/disass_ppc/disass/disass/Debug/disass.dll.embed.manifest b/disass_ppc/disass/disass/Debug/disass.dll.embed.manifest deleted file mode 100644 index 03424d2..0000000 --- a/disass_ppc/disass/disass/Debug/disass.dll.embed.manifest +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/disass_ppc/disass/disass/Debug/disass.dll.embed.manifest.res b/disass_ppc/disass/disass/Debug/disass.dll.embed.manifest.res deleted file mode 100644 index 06b6c59..0000000 Binary files a/disass_ppc/disass/disass/Debug/disass.dll.embed.manifest.res and /dev/null differ diff --git a/disass_ppc/disass/disass/Debug/disass.dll.intermediate.manifest b/disass_ppc/disass/disass/Debug/disass.dll.intermediate.manifest deleted file mode 100644 index c637eff..0000000 --- a/disass_ppc/disass/disass/Debug/disass.dll.intermediate.manifest +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/disass_ppc/disass/disass/Debug/disass.exe.embed.manifest b/disass_ppc/disass/disass/Debug/disass.exe.embed.manifest deleted file mode 100644 index 03424d2..0000000 --- a/disass_ppc/disass/disass/Debug/disass.exe.embed.manifest +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/disass_ppc/disass/disass/Debug/disass.exe.embed.manifest.res b/disass_ppc/disass/disass/Debug/disass.exe.embed.manifest.res deleted file mode 100644 index 84deeec..0000000 Binary files a/disass_ppc/disass/disass/Debug/disass.exe.embed.manifest.res and /dev/null differ diff --git a/disass_ppc/disass/disass/Debug/disass.exe.intermediate.manifest b/disass_ppc/disass/disass/Debug/disass.exe.intermediate.manifest deleted file mode 100644 index c637eff..0000000 --- a/disass_ppc/disass/disass/Debug/disass.exe.intermediate.manifest +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/disass_ppc/disass/disass/Debug/disass.obj b/disass_ppc/disass/disass/Debug/disass.obj deleted file mode 100644 index a0aac6a..0000000 Binary files a/disass_ppc/disass/disass/Debug/disass.obj and /dev/null differ diff --git a/disass_ppc/disass/disass/Debug/disass.pch b/disass_ppc/disass/disass/Debug/disass.pch deleted file mode 100644 index 5a59eb8..0000000 Binary files a/disass_ppc/disass/disass/Debug/disass.pch and /dev/null differ diff --git a/disass_ppc/disass/disass/Debug/mt.dep b/disass_ppc/disass/disass/Debug/mt.dep deleted file mode 100644 index 177f874..0000000 --- a/disass_ppc/disass/disass/Debug/mt.dep +++ /dev/null @@ -1 +0,0 @@ -Manifest resource last updated at 14:56:50.17 on 27/04/2009 diff --git a/disass_ppc/disass/disass/Debug/stdafx.obj b/disass_ppc/disass/disass/Debug/stdafx.obj deleted file mode 100644 index 34270bc..0000000 Binary files a/disass_ppc/disass/disass/Debug/stdafx.obj and /dev/null differ diff --git a/disass_ppc/disass/disass/Debug/vc80.idb b/disass_ppc/disass/disass/Debug/vc80.idb deleted file mode 100644 index 52c1a0e..0000000 Binary files a/disass_ppc/disass/disass/Debug/vc80.idb and /dev/null differ diff --git a/disass_ppc/disass/disass/Debug/vc80.pdb b/disass_ppc/disass/disass/Debug/vc80.pdb deleted file mode 100644 index 87f1f84..0000000 Binary files a/disass_ppc/disass/disass/Debug/vc80.pdb and /dev/null differ diff --git a/disass_ppc/disass/disass/ReadMe.txt b/disass_ppc/disass/disass/ReadMe.txt deleted file mode 100644 index 888e62b..0000000 --- a/disass_ppc/disass/disass/ReadMe.txt +++ /dev/null @@ -1,33 +0,0 @@ -======================================================================== - CONSOLE APPLICATION : disass Project Overview -======================================================================== - -AppWizard has created this disass application for you. - -This file contains a summary of what you will find in each of the files that -make up your disass application. - - -disass.vcproj - This is the main project file for VC++ projects generated using an Application Wizard. - It contains information about the version of Visual C++ that generated the file, and - information about the platforms, configurations, and project features selected with the - Application Wizard. - -disass.cpp - This is the main application source file. - -///////////////////////////////////////////////////////////////////////////// -Other standard files: - -StdAfx.h, StdAfx.cpp - These files are used to build a precompiled header (PCH) file - named disass.pch and a precompiled types file named StdAfx.obj. - -///////////////////////////////////////////////////////////////////////////// -Other notes: - -AppWizard uses "TODO:" comments to indicate parts of the source code you -should add to or customize. - -///////////////////////////////////////////////////////////////////////////// diff --git a/disass_ppc/disass/disass/disass.cpp b/disass_ppc/disass/disass/disass.cpp deleted file mode 100644 index 31769eb..0000000 --- a/disass_ppc/disass/disass/disass.cpp +++ /dev/null @@ -1,1136 +0,0 @@ -/* - * mon_ppc.cpp - PowerPC disassembler - * - * cxmon (C) 1997-2004 Christian Bauer, Marc Hellwig - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "stdafx.h" -#include "mon.h" - - -// Instruction fields -static int primop, exop, vxop, ra, rb, rc, rd; -static unsigned short imm; - - -// Codes for trap instructions -static char *to_code[32] = { - NULL, "lgt", "llt", NULL, "eq", "lge", "lle", NULL, - "gt", NULL, NULL, NULL, "ge", NULL, NULL, NULL, - "lt", NULL, NULL, NULL, "le", NULL, NULL, NULL, - "ne", NULL, NULL, NULL, NULL, NULL, NULL, "" -}; - - -// Macros for instruction forms -#define iform(s, t) sprintf(f, "%s\t$%08x\n", s, t) - -#define bform(s, t) \ - if (rd == 0) \ - sprintf(f, "bdnzf%s\t%d,$%08x\n", s, ra, t); \ - else if (rd == 2) \ - sprintf(f, "bdzf%s\t%d,$%08x\n", s, ra, t); \ - else if (rd == 4) { \ - if (ra == 0) \ - sprintf(f, "bge%s\t$%08x\n", s, t); \ - else if (ra == 1) \ - sprintf(f, "ble%s\t$%08x\n", s, t); \ - else if (ra == 2) \ - sprintf(f, "bne%s\t$%08x\n", s, t); \ - else \ - sprintf(f, "bf%s\t%d,$%08x\n", s, ra, t); \ - } else if (rd == 8) \ - sprintf(f, "bdnzt%s\t%d,$%08x\n", s, ra, t); \ - else if (rd == 10) \ - sprintf(f, "bdzt%s\t%d,$%08x\n", s, ra, t); \ - else if (rd == 12) { \ - if (ra == 0) \ - sprintf(f, "blt%s\t$%08x\n", s, t); \ - else if (ra == 1) \ - sprintf(f, "bgt%s\t$%08x\n", s, t); \ - else if (ra == 2) \ - sprintf(f, "beq%s\t$%08x\n", s, t); \ - else \ - sprintf(f, "bt%s\t%d,$%08x\n", s, ra, t); \ - } else if (rd == 16) \ - sprintf(f, "bdnz%s\t$%08x\n", s, t); \ - else if (rd == 18) \ - sprintf(f, "bdz%s\t$%08x\n", s, t); \ - else \ - sprintf(f, "bc%s\t%d,%d,$%08x\n", s, rd, ra, t) - -#define scform(s) sprintf(f, s "\n") - -#define dform_ls(s) \ - if (ra == 0) \ - sprintf(f, "%s\tr%d,$%08x\n", s, rd, short(imm)); \ - else \ - sprintf(f, "%s\tr%d,$%04x(r%d)\n", s, rd, short(imm), ra) -#define dform_fls(s) \ - if (ra == 0) \ - sprintf(f, "%s\tfr%d,$%08x\n", s, rd, short(imm)); \ - else \ - sprintf(f, "%s\tfr%d,$%04x(r%d)\n", s, rd, short(imm), ra) -#define dform_simm(s) sprintf(f, "%s\tr%d,r%d,$%04x\n", s, rd, ra, short(imm)) -#define dform_simmn(s) sprintf(f, "%s\tr%d,r%d,$%04x\n", s, rd, ra, (-imm) & 0xffff) -#define dform_uimm(s) sprintf(f, "%s\tr%d,r%d,$%04x\n", s, ra, rd, imm) -#define dform_crs(s) sprintf(f, "%s\tcrf%d,r%d,$%04x\n", s, rd >> 2, ra, short(imm)) -#define dform_cru(s) sprintf(f, "%s\tcrf%d,r%d,$%04x\n", s, rd >> 2, ra, imm) -#define dform_to(s) sprintf(f, "%s\t%d,r%d,$%04x\n", s, rd, ra, short(imm)) - -#define dsform(s) sprintf(f, "%s\tr%d,$%04x(r%d)\n", s, rd, short(imm & 0xfffc), ra) - -#define xform_vls(s) \ - if (ra == 0) \ - sprintf(f, "%s\tv%d,r%d\n", s, rd, rb); \ - else \ - sprintf(f, "%s\tv%d,r%d,r%d\n", s, rd, ra, rb) -#define xform_ls(s) \ - if (ra == 0) \ - sprintf(f, "%s\tr%d,r%d\n", s, rd, rb); \ - else \ - sprintf(f, "%s\tr%d,r%d,r%d\n", s, rd, ra, rb) -#define xform_fls(s) \ - if (ra == 0) \ - sprintf(f, "%s\tfr%d,r%d\n", s, rd, rb); \ - else \ - sprintf(f, "%s\tfr%d,r%d,r%d\n", s, rd, ra, rb) -#define xform_lsswi(s) \ - if (ra == 0) \ - sprintf(f, "%s\tr%d,%d\n", s, rd, rb ? rb : 32); \ - else \ - sprintf(f, "%s\tr%d,r%d,%d\n", s, rd, ra, rb ? rb : 32) -#define xform_db(s) sprintf(f, "%s\tr%d,r%d\n", s, rd, rb) -#define xform_d(s) sprintf(f, "%s\tr%d\n", s, rd) -#define xform_fsr(s) sprintf(f, s "\tr%d,%d\n", rd, ra & 0xf) -#define xform_sabc(s) sprintf(f, "%s%s\tr%d,r%d,r%d\n", s, w & 1 ? "." : "", ra, rd, rb) -#define xform_sac(s) sprintf(f, "%s%s\tr%d,r%d\n", s, w & 1 ? "." : "", ra, rd) -#define xform_tsr(s) sprintf(f, s "\t%d,r%d\n", ra & 0xf, rd) -#define xform_sash(s) sprintf(f, s "%s\tr%d,r%d,%d\n", w & 1 ? "." : "", ra, rd, rb) -#define xform_crlab(s) sprintf(f, "%s\tcrf%d,r%d,r%d\n", s, rd >> 2, ra, rb) -#define xform_fcrab(s) sprintf(f, "%s\tcrf%d,fr%d,fr%d\n", s, rd >> 2, ra, rb) -#define xform_crcr(s) sprintf(f, "%s\tcrf%d,crf%d\n", s, rd >> 2, ra >> 2) -#define xform_cr(s) sprintf(f, "%s\tcrf%d\n", s, rd >> 2) -#define xform_cri(s) sprintf(f, s "%s\tcrf%d,%d\n", w & 1 ? "." : "", rd >> 2, rb >> 1) -#define xform_to(s) sprintf(f, "%s\t%d,r%d,r%d\n", s, rd, ra, rb) -#define xform_fdb(s) sprintf(f, "%s%s\tfr%d,fr%d\n", s, w & 1 ? "." : "", rd, rb) -#define xform_fd(s) sprintf(f, "%s%s\tfr%d\n", s, w & 1 ? "." : "", rd) -#define xform_crb(s) sprintf(f, "%s%s\tcrb%d\n", s, w & 1 ? "." : "", rd) -#define xform_ab(s) sprintf(f, "%s\tr%d,r%d\n", s, ra, rb) -#define xform_b(s) sprintf(f, "%s\tr%d\n", s, rb) -#define xform(s) sprintf(f, s "\n") - -#define xlform_b(s) sprintf(f, "%s\t%d,%d\n", s, rd, ra) -#define xlform_cr(s) sprintf(f, "%s\tcrb%d,crb%d,crb%d\n", s, rd, ra, rb) -#define xlform_crcr(s) sprintf(f, "%s\tcrf%d,crf%d\n", s, rd >> 2, ra >> 2) -#define xlform(s) sprintf(f, s "\n") - -#define xfxform_fspr(s) sprintf(f, "%s\tr%d,SPR%d\n", s, rd, ra | (rb << 5)) -#define xfxform_crm(s) sprintf(f, s "\t$%02x,r%d\n", w >> 12 & 0xff, rd) -#define xfxform_tspr(s) sprintf(f, "%s\tSPR%d,r%d\n", s, ra | (rb << 5), rd) -#define xfxform_tb(s) sprintf(f, "%s\tr%d\n", s, rd) - -#define xflform(s) sprintf(f, s "%s\t$%02x,fr%d\n", w & 1 ? "." : "", w >> 17 & 0xff, rb) - -#define xsform(s) sprintf(f, s "%s\tr%d,r%d,%d\n", w & 1 ? "." : "", ra, rd, rb | (w & 2 ? 32 : 0)) - -#define xoform_dab(s) sprintf(f, "%s%s\tr%d,r%d,r%d\n", s, w & 1 ? "." : "", rd, ra, rb) -#define xoform_da(s) sprintf(f, "%s%s\tr%d,r%d\n", s, w & 1 ? "." : "", rd, ra) - -#define aform_dab(s) sprintf(f, "%s%s\tfr%d,fr%d,fr%d\n", s, w & 1 ? "." : "", rd, ra, rb) -#define aform_db(s) sprintf(f, "%s%s\tfr%d,fr%d\n", s, w & 1 ? "." : "", rd, rb) -#define aform_dac(s) sprintf(f, "%s%s\tfr%d,fr%d,fr%d\n", s, w & 1 ? "." : "", rd, ra, rc) -#define aform_dacb(s) sprintf(f, "%s%s\tfr%d,fr%d,fr%d,fr%d\n", s, w & 1 ? "." : "", rd, ra, rc, rb) - -#define mform(s) sprintf(f, "%s%s\tr%d,r%d,r%d,$%08x\n", s, w & 1 ? "." : "", ra, rd, rb, mbme2mask(w >> 6 & 31, w >>1 & 31)) -#define mform_i(s) sprintf(f, "%s%s\tr%d,r%d,%d,$%08x\n", s, w & 1 ? "." : "", ra, rd, rb, mbme2mask(w >> 6 & 31, w >>1 & 31)) - -#define mdform(s) sprintf(f, "%s%s\tr%d,r%d,%d,%d\n", s, w & 1 ? "." : "", ra, rd, rb | (w & 2 ? 32 : 0), rc | (w & 32 ? 32 : 0)) - -#define mdsform(s) sprintf(f, "%s%s\tr%d,r%d,r%d,%d\n", s, w & 1 ? "." : "", ra, rd, rb, rc | (w & 32 ? 32 : 0)) - -#define va_form(s) sprintf(f, "%s\tv%d,v%d,v%d,v%d\n", s, rd, ra, rb, rc) -#define vx_form(s) sprintf(f, "%s\tv%d,v%d,v%d\n", s, rd, ra, rb) -#define vxr_form(s) sprintf(f, "%s%s\tv%d,v%d,v%d\n", s, w & (1 << 10) ? "." : "", rd, ra, rb) -#define vxi_ra_form(s) sprintf(f, "%s\tv%d,v%d,%d\n", s, rd, rb, ra) -#define vx_raz_form(s) \ - if (ra == 0) \ - sprintf(f, "%s\tv%d,v%d\n", s, rd, rb); \ - else \ - sprintf(f, "?\n") -#define vxi_ras_rbz_form(s) \ - if (rb == 0) \ - sprintf(f, "%s\tv%d,%d\n", s, rd, ra - (ra & 0x10 ? 0x20 : 0)); \ - else \ - sprintf(f, "?\n") - -// Prototypes -static void disass4(char* f, unsigned int adr, unsigned int w); -static void disass19(char* f, unsigned int adr, unsigned int w); -static void disass31(char* f, unsigned int adr, unsigned int w); -static void disass59(char* f, unsigned int adr, unsigned int w); -static void disass63(char* f, unsigned int adr, unsigned int w); - -extern "C" __declspec(dllexport) void disass_ppc(char* f, unsigned int adr, unsigned int w); - -static unsigned int mbme2mask(int mb, int me); -static char *get_spr(int reg); - - - - - - - -/* - * Disassemble one instruction - */ - -extern "C" __declspec(dllexport) void disass_ppc(char* f, unsigned int adr, unsigned int w) -{ - // Divide instruction into fields - primop = w >> 26; - rd = w >> 21 & 0x1f; - ra = w >> 16 & 0x1f; - rb = w >> 11 & 0x1f; - rc = w >> 6 & 0x1f; - exop = w >> 1 & 0x3ff; - vxop = w & 0x7ff; - imm = w & 0xffff; - - // Decode primary opcode - switch (primop) { - case 2: // 64 bit - if (to_code[rd] != NULL) - sprintf(f, "td%si\tr%d,$%04x\n", to_code[rd], ra, short(imm)); - else - dform_to("tdi"); - break; - - case 3: - if (to_code[rd] != NULL) - sprintf(f, "tw%si\tr%d,$%04x\n", to_code[rd], ra, short(imm)); - else - dform_to("twi"); - break; - - case 4: // AltiVec - disass4(f, adr, w); - break; - - case 7: dform_simm("mulli"); break; - case 8: dform_simm("subfic"); break; - - case 10: - if (rd & 1) - dform_cru("cmpldi"); // 64 bit - else - dform_cru("cmplwi"); - break; - - case 11: - if (rd & 1) - dform_crs("cmpdi"); // 64 bit - else - dform_crs("cmpwi"); - break; - - case 12: - if (imm < 0x8000) - dform_simm("addic"); - else - dform_simmn("subic"); - break; - - case 13: - if (imm < 0x8000) - dform_simm("addic."); - else - dform_simmn("subic."); - break; - - case 14: - if (ra == 0) - sprintf(f, "li\tr%d,$%04x\n", rd, short(imm)); - else - if (imm < 0x8000) - dform_simm("addi"); - else - dform_simmn("subi"); - break; - - case 15: - if (ra == 0) - sprintf(f, "lis\tr%d,$%04x\n", rd, imm); - else - if (imm < 0x8000) - dform_simm("addis"); - else - dform_simmn("subis"); - break; - - case 16: { - int target = short(imm & 0xfffc); - char *form; - if (w & 1) - if (w & 2) - form = "la"; - else { - form = "l"; - target += adr; - } - else - if (w & 2) - form = "a"; - else { - form = ""; - target += adr; - } - bform(form, target); - break; - } - - case 17: - if (w & 2) - scform("sc"); - else - sprintf(f, "?\n"); - break; - - case 18: { - int target = w & 0x03fffffc; - if (target & 0x02000000) - target |= 0xfc000000; - if (w & 1) - if (w & 2) - iform("bla", target); - else - iform("bl", adr + target); - else - if (w & 2) - iform("ba", target); - else - iform("b", adr + target); - break; - } - - case 19: disass19(f, adr, w); break; - case 20: mform_i("rlwimi"); break; - case 21: mform_i("rlwinm"); break; - case 23: mform("rlwnm"); break; - - case 24: - if (rd == 0 && ra == 0 && imm == 0) - sprintf(f, "nop\n"); - else - dform_uimm("ori"); - break; - - case 25: dform_uimm("oris"); break; - case 26: dform_uimm("xori"); break; - case 27: dform_uimm("xoris"); break; - case 28: dform_uimm("andi."); break; - case 29: dform_uimm("andis."); break; - - case 30: // 64 bit - switch (w >> 1 & 0xf) { - case 0: case 1: mdform("rldicl"); break; - case 2: case 3: mdform("rldicr"); break; - case 4: case 5: mdform("rldic"); break; - case 6: case 7: mdform("rldimi"); break; - case 8: mdsform("rldcl"); break; - case 9: mdsform("rldcr"); break; - default: - sprintf(f, "?\n"); - break; - }; - break; - - case 31: disass31(f, adr, w); break; - case 32: dform_ls("lwz"); break; - case 33: dform_ls("lwzu"); break; - case 34: dform_ls("lbz"); break; - case 35: dform_ls("lbzu"); break; - case 36: dform_ls("stw"); break; - case 37: dform_ls("stwu"); break; - case 38: dform_ls("stb"); break; - case 39: dform_ls("stbu"); break; - case 40: dform_ls("lhz"); break; - case 41: dform_ls("lhzu"); break; - case 42: dform_ls("lha"); break; - case 43: dform_ls("lhau"); break; - case 44: dform_ls("sth"); break; - case 45: dform_ls("sthu"); break; - case 46: dform_ls("lmw"); break; - case 47: dform_ls("stmw"); break; - case 48: dform_fls("lfs"); break; - case 49: dform_fls("lfsu"); break; - case 50: dform_fls("lfd"); break; - case 51: dform_fls("lfdu"); break; - case 52: dform_fls("stfs"); break; - case 53: dform_fls("stfsu"); break; - case 54: dform_fls("stfd"); break; - case 55: dform_fls("stfdu"); break; - - case 58: // 64 bit - switch (w & 3) { - case 0: dsform("ld"); break; - case 1: dsform("ldu"); break; - case 2: dsform("lwa"); break; - default: - sprintf(f, "?\n"); - break; - } - break; - - case 59: disass59(f, adr, w); break; - - case 62: // 64 bit - switch (w & 3) { - case 0: dsform("std"); break; - case 1: dsform("stdu"); break; - default: - sprintf(f, "?\n"); - break; - } - break; - - case 63: disass63(f, adr, w); break; - - default: - if (!w) - sprintf(f, "illegal\n"); - else - sprintf(f, "?\n"); - break; - } -} - - -/* - * Disassemble instruction with primary opcode = 4 (VX-Form) - */ - -static void disass4(char* f, unsigned int adr, unsigned int w) -{ - switch (vxop) { - case 1540: - if (ra == 0 && rb == 0) - sprintf(f, "mfvscr\tv%d\n", rd); - else - sprintf(f, "?\n"); - break; - case 1604: - if (rd == 0 && ra == 0) - sprintf(f, "mtvscr\tv%d\n", rb); - else - sprintf(f, "?\n"); - break; - case 384: vx_form("vaddcuw"); break; - case 10: vx_form("vaddfp"); break; - case 768: vx_form("vaddsbs"); break; - case 832: vx_form("vaddshs"); break; - case 896: vx_form("vaddsws"); break; - case 0: vx_form("vaddubm"); break; - case 512: vx_form("vaddubs"); break; - case 64: vx_form("vadduhm"); break; - case 576: vx_form("vadduhs"); break; - case 128: vx_form("vadduwm"); break; - case 640: vx_form("vadduws"); break; - case 1028: vx_form("vand"); break; - case 1092: vx_form("vandc"); break; - case 1282: vx_form("vavgsb"); break; - case 1346: vx_form("vavgsh"); break; - case 1410: vx_form("vavgsw"); break; - case 1026: vx_form("vavgub"); break; - case 1090: vx_form("vavguh"); break; - case 1154: vx_form("vavguw"); break; - case 842: vxi_ra_form("vcfsx"); break; - case 778: vxi_ra_form("vcfux"); break; - case 966: case 966+1024: vxr_form("vcmpbfp"); break; - case 198: case 198+1024: vxr_form("vcmpeqfp"); break; - case 6: case 6+1024: vxr_form("vcmpequb"); break; - case 70: case 70+1024: vxr_form("vcmpequh"); break; - case 134: case 134+1024: vxr_form("vcmpequw"); break; - case 454: case 454+1024: vxr_form("vcmpgefp"); break; - case 710: case 710+1024: vxr_form("vcmpgtfp"); break; - case 774: case 774+1024: vxr_form("vcmpgtsb"); break; - case 838: case 838+1024: vxr_form("vcmpgtsh"); break; - case 902: case 902+1024: vxr_form("vcmpgtsw"); break; - case 518: case 518+1024: vxr_form("vcmpgtub"); break; - case 582: case 582+1024: vxr_form("vcmpgtuh"); break; - case 646: case 646+1024: vxr_form("vcmpgtuw"); break; - case 970: vxi_ra_form("vctsxs"); break; - case 906: vxi_ra_form("vctuxs"); break; - case 394: vx_raz_form("vexptefp"); break; - case 458: vx_raz_form("vlogefp"); break; - case 1034: vx_form("vmaxfp"); break; - case 258: vx_form("vmaxsb"); break; - case 322: vx_form("vmaxsh"); break; - case 386: vx_form("vmaxsw"); break; - case 2: vx_form("vmaxub"); break; - case 66: vx_form("vmaxuh"); break; - case 130: vx_form("vmaxuw"); break; - case 1098: vx_form("vminfp"); break; - case 770: vx_form("vminsb"); break; - case 834: vx_form("vminsh"); break; - case 898: vx_form("vminsw"); break; - case 514: vx_form("vminub"); break; - case 578: vx_form("vminuh"); break; - case 642: vx_form("vminuw"); break; - case 12: vx_form("vmrghb"); break; - case 76: vx_form("vmrghh"); break; - case 140: vx_form("vmrghw"); break; - case 268: vx_form("vmrglb"); break; - case 332: vx_form("vmrglh"); break; - case 396: vx_form("vmrglw"); break; - case 776: vx_form("vmulesb"); break; - case 840: vx_form("vmulesh"); break; - case 520: vx_form("vmuleub"); break; - case 584: vx_form("vmuleuh"); break; - case 264: vx_form("vmulosb"); break; - case 328: vx_form("vmulosh"); break; - case 8: vx_form("vmuloub"); break; - case 72: vx_form("vmulouh"); break; - case 1284: vx_form("vnor"); break; - case 1156: vx_form("vor"); break; - case 782: vx_form("vpkpx"); break; - case 398: vx_form("vpkshss"); break; - case 270: vx_form("vpkshus"); break; - case 462: vx_form("vpkswss"); break; - case 334: vx_form("vpkswus"); break; - case 14: vx_form("vpkuhum"); break; - case 142: vx_form("vpkuhus"); break; - case 78: vx_form("vpkuwum"); break; - case 206: vx_form("vpkuwus"); break; - case 266: vx_raz_form("vrefp"); break; - case 714: vx_raz_form("vrfim"); break; - case 522: vx_raz_form("vrfin"); break; - case 650: vx_raz_form("vrfip"); break; - case 586: vx_raz_form("vrfiz"); break; - case 4: vx_form("vrlb"); break; - case 68: vx_form("vrlh"); break; - case 132: vx_form("vrlw"); break; - case 330: vx_raz_form("vrsqrtefp"); break; - case 452: vx_form("vsl"); break; - case 260: vx_form("vslb"); break; - case 324: vx_form("vslh"); break; - case 1036: vx_form("vslo"); break; - case 388: vx_form("vslw"); break; - case 524: vxi_ra_form("vspltb"); break; - case 588: vxi_ra_form("vsplth"); break; - case 780: vxi_ras_rbz_form("vspltisb"); break; - case 844: vxi_ras_rbz_form("vspltish"); break; - case 908: vxi_ras_rbz_form("vspltisw"); break; - case 652: vxi_ra_form("vspltw"); break; - case 708: vx_form("vsr"); break; - case 772: vx_form("vsrab"); break; - case 836: vx_form("vsrah"); break; - case 900: vx_form("vsraw"); break; - case 516: vx_form("vsrb"); break; - case 580: vx_form("vsrh"); break; - case 1100: vx_form("vsro"); break; - case 644: vx_form("vsrw"); break; - case 1408: vx_form("vsubcuw"); break; - case 74: vx_form("vsubfp"); break; - case 1792: vx_form("vsubsbs"); break; - case 1856: vx_form("vsubshs"); break; - case 1920: vx_form("vsubsws"); break; - case 1024: vx_form("vsububm"); break; - case 1536: vx_form("vsububs"); break; - case 1088: vx_form("vsubuhm"); break; - case 1600: vx_form("vsubuhs"); break; - case 1152: vx_form("vsubuwm"); break; - case 1664: vx_form("vsubuws"); break; - case 1928: vx_form("vsumsws"); break; - case 1672: vx_form("vsum2sws"); break; - case 1800: vx_form("vsum4sbs"); break; - case 1608: vx_form("vsum4shs"); break; - case 1544: vx_form("vsum4ubs"); break; - case 846: vx_raz_form("vupkhpx"); break; - case 526: vx_raz_form("vupkhsb"); break; - case 590: vx_raz_form("vupkhsh"); break; - case 974: vx_raz_form("vupklpx"); break; - case 654: vx_raz_form("vupklsb"); break; - case 718: vx_raz_form("vupklsh"); break; - case 1220: vx_form("vxor"); break; - default: - if ((vxop & 0x43f) == 44) { // vsldoi vD,vA,vB,SHB - sprintf(f, "vsldoi\tv%d,v%d,v%d,%d\n", rd, ra, rb, rc & 15); - break; - } - switch (vxop & 0x3f) { // VA-form, must come last - case 46: va_form("vmaddfp"); break; - case 32: va_form("vmhaddshs"); break; - case 33: va_form("vmhraddshs"); break; - case 34: va_form("vmladduhm"); break; - case 37: va_form("vmsummbm"); break; - case 40: va_form("vmsumshm"); break; - case 41: va_form("vmsumshs"); break; - case 36: va_form("vmsumubm"); break; - case 38: va_form("vmsumuhm"); break; - case 39: va_form("vmsumuhs"); break; - case 47: va_form("vnmsubfp"); break; - case 43: va_form("vperm"); break; - case 42: va_form("vsel"); break; - default: sprintf(f, "?\n"); break; - } - break; - } -} - - -/* - * Disassemble instruction with primary opcode = 19 (XL-Form) - */ - -static void disass19(char* f, unsigned int adr, unsigned int w) -{ - switch (exop) { - case 0: xlform_crcr("mcrf"); break; - - case 16: - if (w & 1) - if (rd == 20) - sprintf(f, "blrl\n"); - else - xlform_b("bclrl"); - else - if (rd == 20) - sprintf(f, "blr\n"); - else - xlform_b("bclr"); - break; - - case 33: - if (ra == rb) - sprintf(f, "crnot\tcrb%d,crb%d\n", rd, ra); - else - xlform_cr("crnor"); - break; - - case 50: xlform("rfi"); break; - case 129: xlform_cr("crandc"); break; - case 150: xlform("isync"); break; - - case 193: - if (ra == rd && rb == rd) - sprintf(f, "crclr\tcrb%d\n", rd); - else - xlform_cr("crxor"); - break; - - case 225: xlform_cr("crnand"); break; - case 257: xlform_cr("crand"); break; - - case 289: - if (ra == rd && rb == rd) - sprintf(f, "crset\tcrb%d\n", rd); - else - xlform_cr("creqv"); - break; - - case 417: xlform_cr("crorc"); break; - - case 449: - if (ra == rb) - sprintf(f, "crmove\tcrb%d,crb%d\n", rd, ra); - else - xlform_cr("cror"); - break; - - case 528: - if (w & 1) - if (rd == 20) - sprintf(f, "bctrl\n"); - else - xlform_b("bcctrl"); - else - if (rd == 20) - sprintf(f, "bctr\n"); - else - xlform_b("bcctr"); - break; - - default: - sprintf(f, "?\n"); - break; - } -} - - -/* - * Disassemble instruction with primary opcode = 31 (X-Form/XO-Form/XFX-Form/XS-Form) - */ - -static void disass31(char* f, unsigned int adr, unsigned int w) -{ - switch (exop) { - case 0: - if (rd & 1) - xform_crlab("cmpd"); // 64 bit - else - xform_crlab("cmpw"); - break; - - case 4: - if (rd == 31 && ra == 0 && rb == 0) - xform("trap"); - else if (to_code[rd] != NULL) - sprintf(f, "tw%s\tr%d,r%d\n", to_code[rd], ra, rb); - else - xform_to("tw"); - break; - - case 6: xform_vls("lvsl"); break; - case 7: xform_vls("lvebx"); break; - case 8: xoform_dab("subfc"); break; - case 8+512: xoform_dab("subfco"); break; - case 9: case 9+512: xoform_dab("mulhdu"); break; // 64 bit - case 10: xoform_dab("addc"); break; - case 10+512: xoform_dab("addco"); break; - case 11: case 11+512: xoform_dab("mulhwu"); break; - case 19: xform_d("mfcr"); break; - case 20: xform_ls("lwarx"); break; - case 21: xform_ls("ldx"); break; // 64 bit - case 23: xform_ls("lwzx"); break; - case 24: xform_sabc("slw"); break; - case 26: xform_sac("cntlzw"); break; - case 27: xform_sabc("sld"); break; // 64 bit - case 28: xform_sabc("and"); break; - - case 32: - if (rd & 1) - xform_crlab("cmpld"); // 64 bit - else - xform_crlab("cmplw"); - break; - - case 38: xform_vls("lvsr"); break; - case 39: xform_vls("lvehx"); break; - case 40: xoform_dab("subf"); break; - case 40+512: xoform_dab("subfo"); break; - case 53: xform_ls("ldux"); break; // 64 bit - case 54: xform_ab("dcbst"); break; - case 55: xform_ls("lwzux"); break; - case 58: xform_sac("cntlzd"); break; // 64 bit - case 60: xform_sabc("andc"); break; - - case 68: // 64 bit - if (to_code[rd] != NULL) - sprintf(f, "td%s\tr%d,r%d\n", to_code[rd], ra, rb); - else - xform_to("td"); - break; - - case 71: xform_vls("lvewx"); break; - case 73: case 73+512: xoform_dab("mulhd"); break; // 64 bit - case 75: case 75+512: xoform_dab("mulhw"); break; - case 83: xform_d("mfmsr"); break; - case 84: xform_ls("ldarx"); break; // 64 bit - case 86: xform_ab("dcbf"); break; - case 87: xform_ls("lbzx"); break; - case 103: xform_vls("lvx"); break; - case 104: xoform_da("neg"); break; - case 104+512: xoform_da("nego"); break; - case 119: xform_ls("lbzux"); break; - - case 124: - if (rd == rb) - sprintf(f, "not%s\tr%d,r%d\n", w & 1 ? "." : "", ra, rd); - else - xform_sabc("nor"); - break; - - case 135: xform_vls("stvebx"); break; - case 136: xoform_dab("subfe"); break; - case 136+512: xoform_dab("subfeo"); break; - case 138: xoform_dab("adde"); break; - case 138+512: xoform_dab("addeo"); break; - case 144: xfxform_crm("mtcrf"); break; - case 146: xform_d("mtmsr"); break; - case 149: xform_ls("stdx"); break; // 64 bit - - case 150: - if (w & 1) - xform_ls("stwcx."); - else - sprintf(f, "?\n"); - break; - - case 151: xform_ls("stwx"); break; - case 167: xform_vls("stvehx"); break; - case 181: xform_ls("stdux"); break; // 64 bit - case 183: xform_ls("stwux"); break; - case 199: xform_vls("stvewx"); break; - case 200: xoform_da("subfze"); break; - case 200+512: xoform_da("subfzeo"); break; - case 202: xoform_da("addze"); break; - case 202+512: xoform_da("addzeo"); break; - case 210: xform_tsr("mtsr"); break; - - case 214: // 64 bit - if (w & 1) - xform_ls("stdcx"); - else - sprintf(f, "?\n"); - break; - - case 215: xform_ls("stbx"); break; - case 231: xform_vls("stvx"); break; - case 232: xoform_da("subfme"); break; - case 232+512: xoform_da("subfmeo"); break; - case 233: xoform_dab("mulld"); break; // 64 bit - case 233+512: xoform_dab("mulldo"); break; // 64 bit - case 234: xoform_da("addme"); break; - case 234+512: xoform_da("addmeo"); break; - case 235: xoform_dab("mullw"); break; - case 235+512: xoform_dab("mullwo"); break; - case 242: xform_db("mtsrin"); break; - case 246: xform_ab("dcbtst"); break; - case 247: xform_ls("stbux"); break; - case 266: xoform_dab("add"); break; - case 266+512: xoform_dab("addo"); break; - case 278: xform_ab("dcbt"); break; - case 279: xform_ls("lhzx"); break; - case 284: xform_sabc("eqv"); break; - case 306: xform_b("tlbie"); break; - case 310: xform_ls("eciwx"); break; - case 311: xform_ls("lhzux"); break; - case 316: xform_sabc("xor"); break; - - case 339: - if ((ra | (rb << 5)) == 1) - sprintf(f, "mfxer\tr%d\n", rd); - else if ((ra | (rb << 5)) == 8) - sprintf(f, "mflr\tr%d\n", rd); - else if ((ra | (rb << 5)) == 9) - sprintf(f, "mfctr\tr%d\n", rd); - else if ((ra | (rb << 5)) == 256) - sprintf(f, "mfvrsave\tr%d\n", rd); - else { - char *spr = get_spr(ra | (rb << 5)); - if (spr) - sprintf(f, "mfspr\tr%d,%s\n", rd, spr); - else - xfxform_fspr("mfspr"); - } - break; - - case 341: xform_ls("lwax"); break; // 64 bit - case 343: xform_ls("lhax"); break; - case 359: xform_vls("lvxl"); break; - case 370: xform("tlbia"); break; - - case 822: // AltiVec - if ((rd & 0xc) == 0 && ra == 0 && rb == 0 && (w & 1) == 0) { - if (rd & 0x10) - sprintf(f, "dssall\n"); - else - sprintf(f, "dss\t%d\n", rd & 3); - } - else - sprintf(f, "?\n"); - break; - - case 342: // AltiVec - if ((rd & 0xc) == 0 && (w & 1) == 0) - sprintf(f, "dst%s\tr%d,r%d,%d\n", rd & 0x10 ? "t" : "", ra, rb, rd & 3); - else - sprintf(f, "?\n"); - break; - - case 374: // AltiVec - if ((rd & 0xc) == 0 && (w & 1) == 0) - sprintf(f, "dstst%s\tr%d,r%d,%d\n", rd & 0x10 ? "t" : "", ra, rb, rd & 3); - else - sprintf(f, "?\n"); - break; - - case 371: - if ((ra | (rb << 5)) == 268) - xfxform_tb("mftb"); - else if ((ra | (rb << 5)) == 269) - xfxform_tb("mftbu"); - else - sprintf(f, "?\n"); - break; - - case 373: xform_ls("lwaux"); break; // 64 bit - case 375: xform_ls("lhaux"); break; - case 407: xform_ls("sthx"); break; - case 412: xform_sabc("orc"); break; - case 434: xform_b("slbie"); break; // 64 bit - case 438: xform_ls("ecowx"); break; - case 439: xform_ls("sthux"); break; - - case 444: - if (rd == rb) - sprintf(f, "mr%s\tr%d,r%d\n", w & 1 ? "." : "", ra, rd); - else - xform_sabc("or"); - break; - - case 457: xoform_dab("divdu"); break; // 64 bit - case 457+512: xoform_dab("divduo"); break; // 64 bit - case 459: xoform_dab("divwu"); break; - case 459+512: xoform_dab("divwuo"); break; - - case 467: - if ((ra | (rb << 5)) == 1) - sprintf(f, "mtxer\tr%d\n", rd); - else if ((ra | (rb << 5)) == 8) - sprintf(f, "mtlr\tr%d\n", rd); - else if ((ra | (rb << 5)) == 9) - sprintf(f, "mtctr\tr%d\n", rd); - else if ((ra | (rb << 5)) == 256) - sprintf(f, "mtvrsave\tr%d\n", rd); - else { - char *spr = get_spr(ra | (rb << 5)); - if (spr) - sprintf(f, "mtspr\t%s,r%d\n", spr, rd); - else - xfxform_tspr("mtspr"); - } - break; - - case 470: xform_ab("dcbi"); break; - case 476: xform_sabc("nand"); break; - case 487: xform_vls("stvxl"); break; - case 489: xoform_dab("divd"); break; // 64 bit - case 489+512: xoform_dab("divdo"); break; // 64 bit - case 491: xoform_dab("divw"); break; - case 491+512: xoform_dab("divwo"); break; - case 498: xform("slbia"); break; // 64 bit - case 512: xform_cr("mcrxr"); break; - case 533: xform_ls("lswx"); break; - case 534: xform_ls("lwbrx"); break; - case 535: xform_fls("lfsx"); break; - case 536: xform_sabc("srw"); break; - case 539: xform_sabc("srd"); break; // 64 bit - case 566: xform("tlbsync"); break; - case 567: xform_fls("lfsux"); break; - case 595: xform_fsr("mfsr"); break; - case 597: xform_lsswi("lswi"); break; - case 598: xform("sync"); break; - case 599: xform_fls("lfdx"); break; - case 631: xform_fls("lfdux"); break; - case 659: xform_db("mfsrin"); break; - case 661: xform_ls("stswx"); break; - case 662: xform_ls("stwbrx"); break; - case 663: xform_fls("stfsx"); break; - case 695: xform_fls("stfsux"); break; - case 725: xform_lsswi("stswi"); break; - case 727: xform_fls("stfdx"); break; - case 758: xform_ab("dcba"); break; - case 759: xform_fls("stfdux"); break; - case 790: xform_ls("lhbrx"); break; - case 792: xform_sabc("sraw"); break; - case 794: xform_sabc("srad"); break; // 64 bit - case 824: xform_sash("srawi"); break; - case 826: case 827: xsform("sradi"); break; // 64 bit - case 854: xform("eieio"); break; - case 918: xform_ls("sthbrx"); break; - case 922: xform_sac("extsh"); break; - case 954: xform_sac("extsb"); break; - case 978: sprintf(f, "tlbld\tr%d\n", rb); break; // 603 - case 982: xform_ab("icbi"); break; - case 983: xform_fls("stfiwx"); break; - case 986: xform_sac("extsw"); break; // 64 bit - case 1010: sprintf(f, "tlbli\tr%d\n", rb); break; // 603 - case 1014: xform_ab("dcbz"); break; - - default: - sprintf(f, "?\n"); - break; - } -} - - -/* - * Disassemble instruction with primary opcode = 59 (A-Form) - */ - -static void disass59(char* f, unsigned int adr, unsigned int w) -{ - switch (exop & 0x1f) { - case 18: aform_dab("fdivs"); break; - case 20: aform_dab("fsubs"); break; - case 21: aform_dab("fadds"); break; - case 22: aform_db("fsqrts"); break; - case 24: aform_db("fres"); break; - case 25: aform_dac("fmuls"); break; - case 28: aform_dacb("fmsubs"); break; - case 29: aform_dacb("fmadds"); break; - case 30: aform_dacb("fnmsubs"); break; - case 31: aform_dacb("fnmadds"); break; - - default: - sprintf(f, "?\n"); - break; - } -} - - -/* - * Disassemble instruction with primary opcode = 63 (A-Form/X-Form/XFL-Form) - */ - -static void disass63(char* f, unsigned int adr, unsigned int w) -{ - if (exop & 0x10) - switch (exop & 0x1f) { - case 18: aform_dab("fdiv"); break; - case 20: aform_dab("fsub"); break; - case 21: aform_dab("fadd"); break; - case 22: aform_db("fsqrt"); break; - case 23: aform_dacb("fsel"); break; - case 25: aform_dac("fmul"); break; - case 26: aform_db("frsqrte"); break; - case 28: aform_dacb("fmsub"); break; - case 29: aform_dacb("fmadd"); break; - case 30: aform_dacb("fnmsub"); break; - case 31: aform_dacb("fnmadd"); break; - - default: - sprintf(f, "?\n"); - break; - } - else - switch (exop) { - case 0: xform_fcrab("fcmpu"); break; - case 12: xform_fdb("frsp"); break; - case 14: xform_fdb("fctiw"); break; - case 15: xform_fdb("fctiwz"); break; - case 32: xform_fcrab("fcmpo"); break; - case 38: xform_crb("mtfsb1"); break; - case 40: xform_fdb("fneg"); break; - case 64: xform_crcr("mcrfs"); break; - case 70: xform_crb("mtfsb0"); break; - case 72: xform_fdb("fmr"); break; - case 134: xform_cri("mtfsfi"); break; - case 136: xform_fdb("fnabs"); break; - case 264: xform_fdb("fabs"); break; - case 583: xform_fd("mffs"); break; - case 711: xflform("mtfsf"); break; - case 814: xform_fdb("fctid"); break; // 64 bit - case 815: xform_fdb("fctidz"); break; // 64 bit - case 846: xform_fdb("fcfid"); break; // 64 bit - - default: - sprintf(f, "?\n"); - break; - } -} - - -/* - * Convert mask begin/end to mask - */ - -static unsigned int mbme2mask(int mb, int me) -{ - unsigned int m = 0; - int i; - - if (mb <= me) - for (i=mb; i<=me; i++) - m |= 1 << (31-i); - else { - for (i=0; i<=me; i++) - m |= 1 << (31-i); - for (i=mb; i<=31; i++) - m |= 1 << (31-i); - } - return m; -} - - -/* - * Convert SPR number to register name - */ - -char *get_spr(int reg) -{ - switch (reg) { - case 1: return "xer"; - case 8: return "lr"; - case 9: return "ctr"; - case 18: return "dsisr"; - case 19: return "dar"; - case 22: return "dec"; - case 25: return "sdr1"; - case 26: return "srr0"; - case 27: return "srr1"; - case 272: return "sprg0"; - case 273: return "sprg1"; - case 274: return "sprg2"; - case 275: return "sprg3"; - case 280: return "asr"; // 64 bit - case 282: return "ear"; - case 284: return "tbl"; - case 285: return "tbu"; - case 287: return "pvr"; - case 528: return "ibat0u"; - case 529: return "ibat0l"; - case 530: return "ibat1u"; - case 531: return "ibat1l"; - case 532: return "ibat2u"; - case 533: return "ibat2l"; - case 534: return "ibat3u"; - case 535: return "ibat3l"; - case 536: return "dbat0u"; - case 537: return "dbat0l"; - case 538: return "dbat1u"; - case 539: return "dbat1l"; - case 540: return "dbat2u"; - case 541: return "dbat2l"; - case 542: return "dbat3u"; - case 543: return "dbat3l"; - case 1013: return "dabr"; - - case 0: return "mq"; // 601 - case 4: return "rtcu"; // 601 - case 5: return "rtcl"; // 601 - case 20: return "rtcu"; // 601 - case 21: return "rtcl"; // 601 - case 952: return "mmcr0"; // 604 - case 953: return "pmc1"; // 604 - case 954: return "pmc2"; // 604 - case 955: return "sia"; // 604 - case 956: return "mmcr1"; // 604e - case 957: return "pmc3"; // 604e - case 958: return "pmc4"; // 604e - case 959: return "sda"; // 604 - case 976: return "dmiss"; // 603 - case 977: return "dcmp"; // 603 - case 978: return "hash1"; // 603 - case 979: return "hash2"; // 603 - case 980: return "imiss"; // 603 - case 981: return "icmp"; // 603 - case 982: return "rpa"; // 603 - case 1008: return "hid0"; // 601/603/604 - case 1009: return "hid1"; // 601/603/604e - case 1010: return "iabr"; // 601/603 - case 1023: return "pir"; // 601/604 - - case 256: return "vrsave"; // AltiVec - - default: return NULL; - } -} - diff --git a/disass_ppc/disass/disass/disass.vcproj b/disass_ppc/disass/disass/disass.vcproj deleted file mode 100644 index 7c3a745..0000000 --- a/disass_ppc/disass/disass/disass.vcproj +++ /dev/null @@ -1,209 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/disass_ppc/disass/disass/disass.vcxproj b/disass_ppc/disass/disass/disass.vcxproj deleted file mode 100644 index 9b91019..0000000 --- a/disass_ppc/disass/disass/disass.vcxproj +++ /dev/null @@ -1,99 +0,0 @@ - - - - - Debug - Win32 - - - Release - Win32 - - - - {0EFAD09B-472F-4309-865E-E026D04B7966} - disass - Win32Proj - - - - Application - v120 - Unicode - true - - - DynamicLibrary - v120 - Unicode - - - - - - - - - - - - - <_ProjectFileVersion>12.0.21005.1 - - - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - true - - - $(SolutionDir)$(Configuration)\ - $(Configuration)\ - false - - - - Disabled - WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) - true - EnableFastChecks - MultiThreadedDebugDLL - Use - Level3 - EditAndContinue - - - true - Console - MachineX86 - - - - - WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) - MultiThreadedDLL - Use - Level3 - ProgramDatabase - - - true - Console - true - true - MachineX86 - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/disass_ppc/disass/disass/disass.vcxproj.filters b/disass_ppc/disass/disass/disass.vcxproj.filters deleted file mode 100644 index b773f0f..0000000 --- a/disass_ppc/disass/disass/disass.vcxproj.filters +++ /dev/null @@ -1,33 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav - - - - - Source Files - - - - - Header Files - - - Header Files - - - - - - \ No newline at end of file diff --git a/disass_ppc/disass/disass/mon.h b/disass_ppc/disass/disass/mon.h deleted file mode 100644 index 03d0460..0000000 --- a/disass_ppc/disass/disass/mon.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * mon.h - cxmon main program - * - * cxmon (C) 1997-2004 Christian Bauer, Marc Hellwig - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef MON_H -#define MON_H - -#include - - -/* - * Initialization, deinitialization and invocation - */ - -void mon_init(); -void mon_exit(); -void mon(int argc, char **argv); - - -/* - * Definitions for adding commands to mon - */ - -// Input tokens -enum Token { - T_NULL, // Invalid token - T_END, // End of line - T_NUMBER, // Hexadecimal/decimal number (uint32) - T_STRING, // String enclosed in "" - T_NAME, // Variable name - T_DOT, // '.' - T_COLON, // ':' - T_COMMA, // ',' - T_LPAREN, // '(' - T_RPAREN, // ')' - T_PLUS, // '+' - T_MINUS, // '-' - T_MUL, // '*' - T_DIV, // '/' - T_MOD, // '%' - T_AND, // '&' - T_OR, // '|' - T_EOR, // '^' - T_SHIFTL, // '<<' - T_SHIFTR, // '>>' - T_NOT, // '~' - T_ASSIGN // '=' -}; - -// Scanner variables -extern enum Token mon_token; // Last token read -extern unsigned int mon_number; // Contains the number if mon_token==T_NUMBER -extern char *mon_string; // Contains the string if mon_token==T_STRING -extern char *mon_name; // Contains the variable name if mon_token==T_NAME - -// Streams for input, output and error messages -extern FILE *monin, *monout, *monerr; - -// Current address, value of '.' in expressions -extern unsigned int mon_dot_address; - -extern bool mon_use_real_mem; // Flag: mon is using real memory -extern unsigned int mon_mem_size; // Size of mon buffer (if mon_use_real_mem = false) - -extern bool mon_macos_mode; // Flag: enable features in the disassembler for working with MacOS code - -// Add command to mon -extern void mon_add_command(const char *name, void (*func)(), const char *help_text); - -// Functions for commands -extern void mon_error(const char *s); // Print error message -extern enum Token mon_get_token(); // Get next token -extern bool mon_expression(unsigned int *number); // Parse expression -extern bool mon_aborted(); // Check if Ctrl-C was pressed - -// Memory access -extern unsigned int (*mon_read_byte)(unsigned int adr); -extern void (*mon_write_byte)(unsigned int adr, unsigned int b); -extern unsigned int mon_read_half(unsigned int adr); -extern void mon_write_half(unsigned int adr, unsigned int w); -extern unsigned int mon_read_word(unsigned int adr); -extern void mon_write_word(unsigned int adr, unsigned int l); - -#endif diff --git a/disass_ppc/disass/disass/stdafx.h b/disass_ppc/disass/disass/stdafx.h deleted file mode 100644 index 0be0e6f..0000000 --- a/disass_ppc/disass/disass/stdafx.h +++ /dev/null @@ -1,17 +0,0 @@ -// stdafx.h : include file for standard system include files, -// or project specific include files that are used frequently, but -// are changed infrequently -// - -#pragma once - -#ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later. -#define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows. -#endif - -#include -#include - - - -// TODO: reference additional headers your program requires here diff --git a/disass_ppc/disass/ipch/disass-db224703/disass-803e4bd3.ipch b/disass_ppc/disass/ipch/disass-db224703/disass-803e4bd3.ipch deleted file mode 100644 index 190fc77..0000000 Binary files a/disass_ppc/disass/ipch/disass-db224703/disass-803e4bd3.ipch and /dev/null differ diff --git a/gdb.py b/gdb.py index a856763..29a91f1 100644 --- a/gdb.py +++ b/gdb.py @@ -8,10 +8,10 @@ import subprocess import os import re -from ctypes import * +from capstone import * from iodideGUI import TestSearchCtrl from socket import * -import ctypes +import struct try: from agw import hyperlink as hl @@ -301,10 +301,11 @@ def OnCellClicked (self, cell, x, y, event): self.win.Bind(wx.EVT_MENU, self.OnPopupReadmem, id=self.win.popupID2) menu = wx.Menu() item = wx.MenuItem(menu, self.win.popupID1, "Disassemble") - menu.AppendItem(item) + menu.Append(item) menu.Append(self.win.popupID2, "Read memory") self.win.PopupMenu(menu) menu.Destroy() + return 0 #-------Main gdb class--------------------------------------------------------------------- @@ -573,6 +574,7 @@ def GdbCommand(self, command): """ reply = "" char = "" + command = command.encode('ascii') if self.connect_mode == "Serial": @@ -693,8 +695,7 @@ def OnConnect(self, evt): connectstatuswin.SetFocus() image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) connectstatuswin.SetIcon(icon) g1 = wx.Gauge(connectstatuswin, -1, 4200, (5, 20), (200, 25)) @@ -758,8 +759,7 @@ def OnConnect(self, evt): self.win.statusbar.SetStatusText("", 0) image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) self.connectgdbwin.SetIcon(icon) vs = wx.BoxSizer( wx.VERTICAL ) @@ -987,8 +987,7 @@ def OnConfigureConnection (self,evt): self.connectconfwin = self.CreateConnectConfWindow() image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) self.connectconfwin.SetIcon(icon) vs = wx.BoxSizer( wx.VERTICAL ) @@ -1169,7 +1168,7 @@ def OnDownload(self, evt): dlg = wx.FileDialog( self.win, message="Save file as ...", defaultDir=os.getcwd(), - defaultFile="", wildcard=wildcard, style=wx.SAVE + defaultFile="", wildcard=wildcard, style=wx.FD_SAVE ) dlg.SetFilterIndex(2) @@ -1184,8 +1183,7 @@ def OnDownload(self, evt): downloadwin = self.CreateDownloadWindow() image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) downloadwin.SetIcon(icon) downloadwin.Center() @@ -1290,7 +1288,7 @@ def OnUpload(self, evt): path = "" dlg = wx.FileDialog( self.win, message="Choose a file", defaultDir=os.getcwd(), - defaultFile="default", wildcard="*.*", style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR + defaultFile="default", wildcard="*.*", style=wx.FD_OPEN | wx.FD_MULTIPLE | wx.FD_CHANGE_DIR ) dlg.SetFilterIndex(2) @@ -1385,7 +1383,7 @@ def OnSaveRunningConfig(self, evt): path = "" dlg = wx.FileDialog(self.win, message="Save file as ...", defaultDir=os.getcwd(), - defaultFile="default", wildcard="*.txt", style=wx.SAVE) + defaultFile="default", wildcard="*.txt", style=wx.FD_SAVE) dlg.SetFilterIndex(2) @@ -1415,7 +1413,7 @@ def OnSave(self, evt): dlg = wx.FileDialog( self.win, message="Save file as ...", defaultDir=os.getcwd(), - defaultFile="default", wildcard="*.iod", style=wx.SAVE + defaultFile="default", wildcard="*.iod", style=wx.FD_SAVE ) dlg.SetFilterIndex(2) @@ -1511,7 +1509,7 @@ def OnOpen(self, evt): tmpcomment = [] dlg = wx.FileDialog( self.win, message="Choose a file", defaultDir=os.getcwd(), - defaultFile="default", wildcard="*.iod", style=wx.OPEN | wx.MULTIPLE | wx.CHANGE_DIR + defaultFile="default", wildcard="*.iod", style=wx.FD_OPEN | wx.FD_MULTIPLE | wx.FD_CHANGE_DIR ) dlg.SetFilterIndex(2) @@ -2228,8 +2226,7 @@ def OnReadMem(self, evt): self.memreadwin = self.CreateMemoryWindow () image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) self.memreadwin.SetIcon(icon) self.MemoryHTMLCtrl = wx.html.HtmlWindow(self.memreadwin, -1, wx.DefaultPosition, wx.Size(700, 195)) @@ -2238,10 +2235,10 @@ def OnReadMem(self, evt): memtoolbar = self.memreadwin.CreateToolBar() - memtoolbar.AddSimpleTool(ID_mem_back, wx.Image('images/av_back_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Display previous memory', 'Display previous memory') + memtoolbar.AddTool(ID_mem_back, 'Display previous memory', wx.Image('images/av_back_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Display previous memory') self.win.Bind(wx.EVT_TOOL, self.OnMemBackClick, id=ID_mem_back) - memtoolbar.AddSimpleTool(ID_mem_forward, wx.Image('images/av_play_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Display next memory', 'Display next memory') + memtoolbar.AddTool(ID_mem_forward, 'Display next memory', wx.Image('images/av_play_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Display next memory') self.win.Bind(wx.EVT_TOOL, self.OnMemForwardClick, id=ID_mem_forward) memtoolbar.AddSeparator() @@ -2249,7 +2246,7 @@ def OnReadMem(self, evt): search = TestSearchCtrl(memtoolbar, size=(150,-1), doSearch=self.DoMemSearch) memtoolbar.AddControl(search) - memtoolbar.AddSimpleTool(ID_search_mem_next, wx.Image('images/forward_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Find next', 'Find next') + memtoolbar.AddTool(ID_search_mem_next, 'Find next', wx.Image('images/forward_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Find next') self.win.Bind(wx.EVT_TOOL, self.OnSearchNext, id=ID_search_mem_next) @@ -2502,8 +2499,7 @@ def OnDisplayRegistry (self, evt): if not self.registrywin: self.registrywin = self.CreateRegistryWindow () image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) self.registrywin.SetIcon(icon) self.RegistryHTMLCtrl = wx.html.HtmlWindow(self.registrywin, -1, wx.DefaultPosition, wx.Size(692, 400)) @@ -2542,8 +2538,7 @@ def OnRunningConfig(self, evt): if not self.runningconfigwin: self.runningconfigwin = self.CreateRunningConfigWindow () image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) self.runningconfigwin.SetIcon(icon) self.RunningConfigHTMLCtrl = wx.html.HtmlWindow(self.runningconfigwin, -1, wx.DefaultPosition, wx.Size(592, 600)) @@ -2565,8 +2560,7 @@ def OnProcesses(self, evt): if not self.processeswin: self.processeswin = self.CreateProcessesWindow () image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) self.processeswin.SetIcon(icon) self.ProcessesHTMLCtrl = wx.html.HtmlWindow(self.processeswin, -1, wx.DefaultPosition, wx.Size(312, 400)) @@ -2602,8 +2596,7 @@ def OnMemMap(self, evt): if not self.memmapwin: self.memmapwin = self.CreateMemmapWindow () image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) self.memmapwin.SetIcon(icon) self.MemmapHTMLCtrl = MemmapHTML(self.memmapwin, -1, wx.DefaultPosition, wx.Size(420, 400)) @@ -2760,8 +2753,7 @@ def OnReadHeap(self, evt): self.heapreadwin = self.CreateHeapWindow () image = wx.Image('images/iodide16x16.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap() - icon = wx.EmptyIcon() - icon.CopyFromBitmap(image) + icon = wx.Icon(image) self.heapreadwin.SetIcon(icon) self.HeapHTMLCtrl = MemmapHTML(self.heapreadwin, -1, wx.DefaultPosition, wx.Size(650, 600)) @@ -2770,10 +2762,10 @@ def OnReadHeap(self, evt): heaptoolbar = self.heapreadwin.CreateToolBar() - heaptoolbar.AddSimpleTool(ID_block_back, wx.Image('images/av_back_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Display previous block', 'Display previous block') + heaptoolbar.AddTool(ID_block_back, 'Display previous block', wx.Image('images/av_back_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Display previous block') self.win.Bind(wx.EVT_TOOL, self.OnBlockBackClick, id=ID_block_back) - heaptoolbar.AddSimpleTool(ID_block_forward, wx.Image('images/av_play_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Display next block', 'Display next block') + heaptoolbar.AddTool(ID_block_forward, 'Display next block', wx.Image('images/av_play_small.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Display next block') self.win.Bind(wx.EVT_TOOL, self.OnBlockForwardClick, id=ID_block_forward) heaptoolbar.Realize() @@ -2836,7 +2828,7 @@ def DisplayHeap(self, address, memory): displaybuffer = displaybuffer + "
Alloc name:   " displaybuffer = displaybuffer + "" #dark blue formatted = self.CreateGetMemoryReq(blockvals[3],"28") - result = self.GdbCommand(formatted.encode('ascii')) #set read memory command + result = self.GdbCommand(formatted) #set read memory command if result == "E03": wx.MessageBox("Address can not be read", caption="Error", style=wx.OK|wx.ICON_ERROR, parent=self.win) @@ -3145,9 +3137,7 @@ def DisassembleMemoryPPC(self, address, memory): addr = int(address[0:8],16) displaybuffer = "" -# dis = cdll.disass #access disass.dll - dis = ctypes.cdll.LoadLibrary("disass.dll") #access disass.dll - result = create_string_buffer('\000' * 32) + dis = Cs(CS_ARCH_PPC, CS_MODE_32) i = j = l = x = y = 0 res = "" @@ -3156,12 +3146,11 @@ def DisassembleMemoryPPC(self, address, memory): k = 0 tmp = memory[i:i+8] - word =int(tmp ,16) - dis.disass_ppc(result,addr,word) + word = struct.pack("