smda 2.2.0__tar.gz → 2.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {smda-2.2.0/smda.egg-info → smda-2.2.2}/PKG-INFO +3 -1
- {smda-2.2.0 → smda-2.2.2}/README.md +2 -0
- {smda-2.2.0 → smda-2.2.2}/setup.py +1 -1
- {smda-2.2.0 → smda-2.2.2}/smda/SmdaConfig.py +1 -1
- {smda-2.2.0 → smda-2.2.2}/smda/common/SmdaReport.py +7 -1
- {smda-2.2.0 → smda-2.2.2}/smda/utility/ElfFileLoader.py +1 -1
- {smda-2.2.0 → smda-2.2.2}/smda/utility/StringExtractor.py +3 -1
- {smda-2.2.0 → smda-2.2.2/smda.egg-info}/PKG-INFO +3 -1
- {smda-2.2.0 → smda-2.2.2}/LICENSE +0 -0
- {smda-2.2.0 → smda-2.2.2}/setup.cfg +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/Disassembler.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/DisassemblyResult.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/DisassemblyStatistics.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/__init__.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/cil/CilDisassembler.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/cil/CilInstructionEscaper.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/cil/FunctionAnalysisState.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/cil/__init__.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/BasicBlock.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/BinaryInfo.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/BlockLocator.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/CodeXref.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/DominatorTree.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/SmdaBasicBlock.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/SmdaFunction.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/SmdaInstruction.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/TailcallAnalyzer.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/Tarjan.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/__init__.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/AbstractLabelProvider.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/CilSymbolProvider.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/DelphiKbSymbolProvider.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/ElfApiResolver.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/ElfSymbolProvider.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/GoLabelProvider.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/OrdinalHelper.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/PdbSymbolProvider.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/PeSymbolProvider.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/WinApiResolver.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/common/labelprovider/__init__.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/ida/BackendInterface.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/ida/IdaExporter.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/ida/IdaInterface.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/ida/__init__.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/BitnessAnalyzer.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/FunctionAnalysisState.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/FunctionCandidate.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/FunctionCandidateManager.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/IndirectCallAnalyzer.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/IntelDisassembler.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/IntelInstructionEscaper.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/JumpTableAnalyzer.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/LanguageAnalyzer.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/MnemonicTfIdf.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/__init__.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/intel/definitions.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/utility/BracketQueue.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/utility/DelphiKbFileLoader.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/utility/FileLoader.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/utility/MachoFileLoader.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/utility/MemoryFileLoader.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/utility/PeFileLoader.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/utility/PriorityQueue.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda/utility/__init__.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda.egg-info/SOURCES.txt +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda.egg-info/dependency_links.txt +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda.egg-info/requires.txt +0 -0
- {smda-2.2.0 → smda-2.2.2}/smda.egg-info/top_level.txt +0 -0
- {smda-2.2.0 → smda-2.2.2}/tests/testBracketQueue.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/tests/testEscaper.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/tests/testFileFormatParsers.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/tests/testIntegration.py +0 -0
- {smda-2.2.0 → smda-2.2.2}/tests/testTarjan.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: smda
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: A recursive disassmbler optimized for CFG recovery from memory dumps. Based on capstone.
|
|
5
5
|
Home-page: https://github.com/danielplohmann/smda
|
|
6
6
|
Author: Daniel Plohmann
|
|
@@ -74,6 +74,8 @@ To take full advantage of SMDA's capabilities, make sure to (optionally) install
|
|
|
74
74
|
* pdbparse (currently as fork from https://github.com/VPaulV/pdbparse to support Python3)
|
|
75
75
|
|
|
76
76
|
## Version History
|
|
77
|
+
* 2025-07-25: v2.2.2 - Minor bugfixes.
|
|
78
|
+
* 2025-07-23: v2.2.1 - Added xmetadata field to SmdaReport, with information about imports and exports. Improved string extraction from Go binaries.
|
|
77
79
|
* 2025-06-13: v2.1.0 - Support for export from IDA 9.0+ (THX to @jershmagersh for the update!).
|
|
78
80
|
* 2025-02-26: v2.0.2 - Adjusting relative import, adding init file.
|
|
79
81
|
* 2025-02-25: v2.0.0 - Initial experimental support for CIL (.NET) disassembly.
|
|
@@ -56,6 +56,8 @@ To take full advantage of SMDA's capabilities, make sure to (optionally) install
|
|
|
56
56
|
* pdbparse (currently as fork from https://github.com/VPaulV/pdbparse to support Python3)
|
|
57
57
|
|
|
58
58
|
## Version History
|
|
59
|
+
* 2025-07-25: v2.2.2 - Minor bugfixes.
|
|
60
|
+
* 2025-07-23: v2.2.1 - Added xmetadata field to SmdaReport, with information about imports and exports. Improved string extraction from Go binaries.
|
|
59
61
|
* 2025-06-13: v2.1.0 - Support for export from IDA 9.0+ (THX to @jershmagersh for the update!).
|
|
60
62
|
* 2025-02-26: v2.0.2 - Adjusting relative import, adding init file.
|
|
61
63
|
* 2025-02-25: v2.0.0 - Initial experimental support for CIL (.NET) disassembly.
|
|
@@ -19,7 +19,7 @@ else:
|
|
|
19
19
|
setup(
|
|
20
20
|
name='smda',
|
|
21
21
|
# note to self: always change this in config as well.
|
|
22
|
-
version='2.2.
|
|
22
|
+
version='2.2.2',
|
|
23
23
|
description='A recursive disassmbler optimized for CFG recovery from memory dumps. Based on capstone.',
|
|
24
24
|
long_description_content_type="text/markdown",
|
|
25
25
|
long_description=long_description,
|
|
@@ -5,7 +5,7 @@ import logging
|
|
|
5
5
|
class SmdaConfig(object):
|
|
6
6
|
|
|
7
7
|
# note to self: always change this in setup.py as well!
|
|
8
|
-
VERSION = "2.2.
|
|
8
|
+
VERSION = "2.2.2"
|
|
9
9
|
ESCAPER_DOWNWARD_COMPATIBILITY = "1.13.16"
|
|
10
10
|
CONFIG_FILE_PATH = str(os.path.abspath(__file__))
|
|
11
11
|
PROJECT_ROOT = str(os.path.abspath(os.sep.join([CONFIG_FILE_PATH, "..", ".."])))
|
|
@@ -268,13 +268,19 @@ class SmdaReport(object):
|
|
|
268
268
|
return smda_report
|
|
269
269
|
|
|
270
270
|
def toDict(self) -> dict:
|
|
271
|
+
transformed_code_sections = []
|
|
272
|
+
for section in self.code_sections:
|
|
273
|
+
if section is not None:
|
|
274
|
+
transformed_code_sections.append(("", section[1], section[2]))
|
|
275
|
+
else:
|
|
276
|
+
transformed_code_sections.append(("", 0, 0)) # Handle None sections gracefully
|
|
271
277
|
return {
|
|
272
278
|
"architecture": self.architecture,
|
|
273
279
|
"base_addr": self.base_addr,
|
|
274
280
|
"binary_size": self.binary_size,
|
|
275
281
|
"bitness": self.bitness,
|
|
276
282
|
"code_areas": self.code_areas,
|
|
277
|
-
"code_sections":
|
|
283
|
+
"code_sections": transformed_code_sections,
|
|
278
284
|
"confidence_threshold": self.confidence_threshold,
|
|
279
285
|
"disassembly_errors": self.disassembly_errors,
|
|
280
286
|
"execution_time": self.execution_time,
|
|
@@ -225,7 +225,7 @@ class ElfFileLoader(object):
|
|
|
225
225
|
if segment.flags.value & lief.ELF.Section.FLAGS.EXECINSTR.value:
|
|
226
226
|
segment_start = segment.virtual_address
|
|
227
227
|
segment_size = segment.virtual_size
|
|
228
|
-
if segment_size % segment.alignment != 0:
|
|
228
|
+
if segment.alignment and segment_size % segment.alignment != 0:
|
|
229
229
|
segment_size += segment.alignment - (segment_size % segment.alignment)
|
|
230
230
|
segment_end = segment_start + segment_size
|
|
231
231
|
code_areas.append([segment_start, segment_end])
|
|
@@ -130,6 +130,7 @@ def extract_strings(f: SmdaFunction, mode=None) -> Iterator[Tuple[str, int]]:
|
|
|
130
130
|
if len(data_refs) == 1:
|
|
131
131
|
data_ref = data_refs[0]
|
|
132
132
|
# check if next two instructions are movs
|
|
133
|
+
found_string = False
|
|
133
134
|
if index + 2 < len(instructions) and instructions[index + 1].mnemonic == "mov" and instructions[index + 2].mnemonic == "mov":
|
|
134
135
|
operands = instructions[index + 2].operands.split(",")
|
|
135
136
|
if len(operands) == 2:
|
|
@@ -140,10 +141,11 @@ def extract_strings(f: SmdaFunction, mode=None) -> Iterator[Tuple[str, int]]:
|
|
|
140
141
|
string_result = read_string(f.smda_report, data_ref, potential_string_len)
|
|
141
142
|
if string_result:
|
|
142
143
|
string_read, string_type = string_result
|
|
144
|
+
found_string = True
|
|
143
145
|
yield string_read.rstrip("\x00"), insn.offset, data_ref, string_type
|
|
144
146
|
except:
|
|
145
147
|
pass
|
|
146
|
-
|
|
148
|
+
if not found_string:
|
|
147
149
|
string_result = read_go_string(f.smda_report, data_ref)
|
|
148
150
|
if string_result:
|
|
149
151
|
string_read, string_type = string_result
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: smda
|
|
3
|
-
Version: 2.2.
|
|
3
|
+
Version: 2.2.2
|
|
4
4
|
Summary: A recursive disassmbler optimized for CFG recovery from memory dumps. Based on capstone.
|
|
5
5
|
Home-page: https://github.com/danielplohmann/smda
|
|
6
6
|
Author: Daniel Plohmann
|
|
@@ -74,6 +74,8 @@ To take full advantage of SMDA's capabilities, make sure to (optionally) install
|
|
|
74
74
|
* pdbparse (currently as fork from https://github.com/VPaulV/pdbparse to support Python3)
|
|
75
75
|
|
|
76
76
|
## Version History
|
|
77
|
+
* 2025-07-25: v2.2.2 - Minor bugfixes.
|
|
78
|
+
* 2025-07-23: v2.2.1 - Added xmetadata field to SmdaReport, with information about imports and exports. Improved string extraction from Go binaries.
|
|
77
79
|
* 2025-06-13: v2.1.0 - Support for export from IDA 9.0+ (THX to @jershmagersh for the update!).
|
|
78
80
|
* 2025-02-26: v2.0.2 - Adjusting relative import, adding init file.
|
|
79
81
|
* 2025-02-25: v2.0.0 - Initial experimental support for CIL (.NET) disassembly.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|