You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#1 added very basic project files that only supports a Windows MSVC workflow, using PDB files.
It would be useful to extend/rework this such that we can target other platforms and/or toolchains.
I propose a format in which we can add various data sources for targets.
It would still consist of 3 files (reccmp-project.yml, reccmp-user.yml and reccmp-build.yml).
reccmp-project.yml is supposed to be pushed to a git repo, and should not contain absolute paths
reccmp-user.yml should still not be part of a git repo, and is supposed to be modified by the user (although the tools can initialize it with defaults). This file can contain absolute paths.
reccmp-build.yml should also not be commited to the repo, and is supposed to be modified by the build systems.
I created #7 to discuss file hierarchies.
The proposal in this issue can be developed independent of #7.
The search order is reccmp-build.yml -> reccmp-user.yml -> reccmp-project.yml
The priority order is cli-arguments > reccmp-build.yml > reccmp-user.yml > reccmp-project.yml
Different from #1, is that in the new proposal the yaml files work together more, are fully equivalent and stack on top of each other.
Values of reccmp-build.yml can override values in reccmp-user.yml, which in turn can override values of reccmp-project.yml.
The basic structure is as follows:
targets: # REQUIRED, value = map of targets<id-target1>: # Only required when the current yml overrides properties<datasource1>: # Should be present for every data source property this yml overridestype: win32-dll|ghidra|ida|... # REQUIRED: must be present (should not be overriden, but let's leave this unspecified)<various properties that depend on the type><datasource2>: ...<id-target2>: # Only required when the current yml overrides properties<datasource1>: # Should be present for every data source property this yml overridestype: win32-dll|ghidra|ida|... # REQUIRED: must be present (should not be overriden, but let's leave this unspecified)<various properties that depend on the type><datasource2>: ...
Example project file structure:
# reccmp-project.ymltargets:
LEGO1:
original: # "original" can be whatever. It's a sub-idtype: win32-dll # can also be win32-exe (and also elf32, dylib32, ...)# Perhaps also include arch here or somewhere?filename: LEGO1.DLLhash:
sha256: 14645225bbe81212e9bc1919cd8a692b81b8622abb6561280d99b0fc4151ce17recompiled:
type: win32-dllsource-root: LEGO1ghidra:
type: ghidraserver: @server.mattkc.com:13100 # no username means anonymousrepository: islefilename: LEGO1.DLLcsv-symbols:
type: csvpath: symbols/lego1.csv# reccmp-user.ymltargets:
LEGO1:
original:
path: /games/isle/LEGO1.dllghidra:
path: /home/maarten/ghidra_projects/isle/isle.gprida:
type: idapath: /home/maarten/ida_projects/isle/lego1.idb# reccmp-build.ymltargets:
LEGO1:
recompiled:
path: /home/maarten/projects/isle/build/LEGO1.DLLpdb: /home/maarten/projects/isle/build/LEGO1.PDB
This structure has 5 data sources which can be compared.
#1 added very basic project files that only supports a Windows MSVC workflow, using PDB files.
It would be useful to extend/rework this such that we can target other platforms and/or toolchains.
I propose a format in which we can add various data sources for targets.
It would still consist of 3 files (
reccmp-project.yml
,reccmp-user.yml
andreccmp-build.yml
).reccmp-project.yml
is supposed to be pushed to a git repo, and should not contain absolute pathsreccmp-user.yml
should still not be part of a git repo, and is supposed to be modified by the user (although the tools can initialize it with defaults). This file can contain absolute paths.reccmp-build.yml
should also not be commited to the repo, and is supposed to be modified by the build systems.I created #7 to discuss file hierarchies.
The proposal in this issue can be developed independent of #7.
The search order is
reccmp-build.yml
->reccmp-user.yml
->reccmp-project.yml
The priority order is cli-arguments >
reccmp-build.yml
>reccmp-user.yml
>reccmp-project.yml
Different from #1, is that in the new proposal the yaml files work together more, are fully equivalent and stack on top of each other.
Values of
reccmp-build.yml
can override values inreccmp-user.yml
, which in turn can override values ofreccmp-project.yml
.The basic structure is as follows:
Example project file structure:
This structure has 5 data sources which can be compared.
LEGO1.original
: the original binaryLEGO1.recompiled
: the recompiled binaryLEGO1.ghidra
: a ghidra projectLEGO1.csv-symbols
: csv file with symbolsLEGO1.ida
: an ida projectWe can then compare 2 data sources by running e.g.:
We can use this hierarchy to still allow running reccmp's scripts without project files.
e.g.
What do you think?
The text was updated successfully, but these errors were encountered: