mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-06 03:50:02 +02:00
ignore signature when parsing Rust binary dwarf
This commit is contained in:
parent
9e3052ac3a
commit
f1a95c84b8
2 changed files with 38 additions and 1 deletions
|
@ -42,7 +42,30 @@ public final class DWARFSourceLanguage {
|
||||||
public static final int DW_LANG_UPC = 0x12;
|
public static final int DW_LANG_UPC = 0x12;
|
||||||
public static final int DW_LANG_D = 0x13;
|
public static final int DW_LANG_D = 0x13;
|
||||||
public static final int DW_LANG_Python = 0x14;
|
public static final int DW_LANG_Python = 0x14;
|
||||||
|
public static final int DW_LANG_OpenCL = 0x15;
|
||||||
|
public static final int DW_LANG_Go = 0x16;
|
||||||
|
public static final int DW_LANG_Modula3 = 0x17;
|
||||||
|
public static final int DW_LANG_Haskell = 0x18;
|
||||||
|
public static final int DW_LANG_C_plus_plus_03 = 0x19;
|
||||||
|
public static final int DW_LANG_C_plus_plus_11 = 0x1a;
|
||||||
|
public static final int DW_LANG_OCaml = 0x1b;
|
||||||
|
public static final int DW_LANG_Rust = 0x1c;
|
||||||
|
public static final int DW_LANG_C11 = 0x1d;
|
||||||
|
public static final int DW_LANG_Swift = 0x1e;
|
||||||
|
public static final int DW_LANG_Julia = 0x1f;
|
||||||
|
public static final int DW_LANG_Dylan = 0x20;
|
||||||
|
public static final int DW_LANG_C_plus_plus_14 = 0x21;
|
||||||
|
public static final int DW_LANG_Fortran03 = 0x22;
|
||||||
|
public static final int DW_LANG_Fortran08 = 0x23;
|
||||||
|
public static final int DW_LANG_RenderScript = 0x24;
|
||||||
|
public static final int DW_LANG_BLISS = 0x25;
|
||||||
|
|
||||||
public static final int DW_LANG_lo_user = 0x8000;
|
public static final int DW_LANG_lo_user = 0x8000;
|
||||||
public static final int DW_LANG_hi_user = 0xffff;
|
public static final int DW_LANG_hi_user = 0xffff;
|
||||||
|
|
||||||
|
public static final int DW_LANG_Mips_Assembler = 0x8001;
|
||||||
|
public static final int DW_LANG_GOOGLE_RenderScript = 0x8e57;
|
||||||
|
public static final int DW_LANG_SUN_Assembler = 0x9001;
|
||||||
|
public static final int DW_LANG_ALTIUM_Assembler = 0x9101;
|
||||||
|
public static final int DW_LANG_BORLAND_Delphi = 0xb000;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ import ghidra.app.cmd.comments.AppendCommentCmd;
|
||||||
import ghidra.app.cmd.label.SetLabelPrimaryCmd;
|
import ghidra.app.cmd.label.SetLabelPrimaryCmd;
|
||||||
import ghidra.app.util.bin.format.dwarf4.*;
|
import ghidra.app.util.bin.format.dwarf4.*;
|
||||||
import ghidra.app.util.bin.format.dwarf4.encoding.DWARFAttribute;
|
import ghidra.app.util.bin.format.dwarf4.encoding.DWARFAttribute;
|
||||||
|
import ghidra.app.util.bin.format.dwarf4.encoding.DWARFSourceLanguage;
|
||||||
import ghidra.app.util.bin.format.dwarf4.encoding.DWARFTag;
|
import ghidra.app.util.bin.format.dwarf4.encoding.DWARFTag;
|
||||||
import ghidra.app.util.bin.format.dwarf4.expression.*;
|
import ghidra.app.util.bin.format.dwarf4.expression.*;
|
||||||
import ghidra.program.database.function.OverlappingFunctionException;
|
import ghidra.program.database.function.OverlappingFunctionException;
|
||||||
|
@ -286,7 +287,20 @@ public class DWARFFunctionImporter {
|
||||||
processFuncChildren(diea, dfunc);
|
processFuncChildren(diea, dfunc);
|
||||||
|
|
||||||
Function gfunc = createFunction(dfunc, diea);
|
Function gfunc = createFunction(dfunc, diea);
|
||||||
if (gfunc != null) {
|
|
||||||
|
boolean updateSignature = true;
|
||||||
|
|
||||||
|
DWARFCompilationUnit firstCompilationUnit = prog.getCompilationUnits().get(0);
|
||||||
|
if (firstCompilationUnit != null) {
|
||||||
|
Number dwarfLanguage = firstCompilationUnit.getCompileUnit().getLanguage();
|
||||||
|
|
||||||
|
// Rust does not have associated function signature
|
||||||
|
if (dwarfLanguage == (Number) DWARFSourceLanguage.DW_LANG_Rust) {
|
||||||
|
updateSignature = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gfunc != null && updateSignature) {
|
||||||
|
|
||||||
if (formalParams.isEmpty() && dfunc.localVarErrors) {
|
if (formalParams.isEmpty() && dfunc.localVarErrors) {
|
||||||
// if there were no defined parameters and we had problems decoding local variables,
|
// if there were no defined parameters and we had problems decoding local variables,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue