Ghidra-Cpp-Class-Analyzer icon indicating copy to clipboard operation
Ghidra-Cpp-Class-Analyzer copied to clipboard

Ghidra 10.1.4: "String index out of range: 0" when trying to analyze an executable

Open Akronymus-git opened this issue 3 years ago • 3 comments

String index out of range: 0 java.lang.StringIndexOutOfBoundsException: String index out of range: 0 at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:48) at java.base/java.lang.String.charAt(String.java:711) at mdemangler.MDMangGhidra.demangle(MDMangGhidra.java:58) at ghidra.app.cmd.data.TypeDescriptorModel.getMDComplexType(TypeDescriptorModel.java:628) at ghidra.app.cmd.data.TypeDescriptorModel.doGetTypeName(TypeDescriptorModel.java:445) at ghidra.app.cmd.data.TypeDescriptorModel.checkTypeNameComponent(TypeDescriptorModel.java:159) at ghidra.app.cmd.data.TypeDescriptorModel.validateModelSpecificInfo(TypeDescriptorModel.java:116) at ghidra.app.cmd.data.AbstractCreateDataTypeModel.validate(AbstractCreateDataTypeModel.java:270) at ghidra.app.cmd.data.AbstractCreateDataTypeModel.isValid(AbstractCreateDataTypeModel.java:399) at ghidra.app.cmd.data.AbstractCreateDataTypeModel.checkValidity(AbstractCreateDataTypeModel.java:371) at ghidra.app.cmd.data.TypeDescriptorModel.getTypeName(TypeDescriptorModel.java:410) at ghidra.app.cmd.data.TypeDescriptorModel.hasComplexType(TypeDescriptorModel.java:455) at ghidra.app.cmd.data.TypeDescriptorModel.getRefType(TypeDescriptorModel.java:479) at cppclassanalyzer.analysis.vs.VsCppClassAnalyzer$DescriptorProcessor.process(VsCppClassAnalyzer.java:187) at cppclassanalyzer.analysis.vs.VsCppClassAnalyzer.buildClassTypeInfoDatabase(VsCppClassAnalyzer.java:132) at cppclassanalyzer.analysis.vs.VsCppClassAnalyzer.added(VsCppClassAnalyzer.java:71) at ghidra.app.plugin.core.analysis.AnalysisScheduler.runAnalyzer(AnalysisScheduler.java:186) at ghidra.app.plugin.core.analysis.AnalysisTask.applyTo(AnalysisTask.java:39) at ghidra.app.plugin.core.analysis.AutoAnalysisManager$AnalysisTaskWrapper.run(AutoAnalysisManager.java:688) at ghidra.app.plugin.core.analysis.AutoAnalysisManager.startAnalysis(AutoAnalysisManager.java:788) at ghidra.app.plugin.core.analysis.AutoAnalysisManager.startAnalysis(AutoAnalysisManager.java:667) at ghidra.app.plugin.core.analysis.AutoAnalysisManager.startAnalysis(AutoAnalysisManager.java:632) at ghidra.app.plugin.core.analysis.AnalysisBackgroundCommand.applyTo(AnalysisBackgroundCommand.java:58) at ghidra.app.plugin.core.analysis.AnalyzeAllOpenProgramsTask$MyAnalysisBackgroundCommand.applyTo(AnalyzeAllOpenProgramsTask.java:372) at ghidra.framework.plugintool.mgr.BackgroundCommandTask.run(BackgroundCommandTask.java:102) at ghidra.framework.plugintool.mgr.ToolTaskManager.run(ToolTaskManager.java:319) at java.base/java.lang.Thread.run(Thread.java:831)


Build Date: 2022-May-19 0956 EDT Ghidra Version: 10.1.4 Java Home: C:\Program Files\Java\jdk-16.0.2 JVM Version: Oracle Corporation 16.0.2 OS: Windows 10 10.0 amd64 Workstation: DESKTOP-CI9AUNU

Akronymus-git avatar Jul 28 '22 10:07 Akronymus-git

That's strange. It looks like I need to check if the string is empty before checking if a Set<String> contains it. I would have expected the Set<String> to check.

It could be something else as well but this is what it looks like from a glance. Thank you for reporting this.

astrelsky avatar Jul 28 '22 10:07 astrelsky

After some further checking, it seems to have happened because I already analyzed/manually did some RE for the executable. Doing it on a newly imported exe, even though it was the same, caused no problems.

Akronymus-git avatar Jul 28 '22 10:07 Akronymus-git

After some further checking, it seems to have happened because I already analyzed/manually did some RE for the executable. Doing it on a newly imported exe, even though it was the same, caused no problems.

The exception seems to be originating from Ghidra as well and not where I thought it was. The most I would be able to do it catch it so the analyzer can ignore it and continue.

astrelsky avatar Jul 28 '22 21:07 astrelsky