mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-20 06:35:19 +08:00
GP-4562: once more more...
GP-4562: once more... GP-4562: once more... GP-4562: test error GP-4562: post-review pt4 GP-4562: post-review pt3 GP-4562: post-review pt2 GP-4562: post-review pt1 GP-4562: warnings (Win) GP-4562: warnings GP-4562: windows warning GP-4562: notes GP-4562: notes GP-4562: rearranged slightly GP-4562: clean-up GP-4562: powershell adds GP-4562: powershell adds GP-4562: added task GP-4562: oops GP-4562: buildXml GP-4562: moving stuff GP-4562: re-generating GP-4562: gdb (passes tests) GP-4562: first pass GP4562: xsltGP-4562: rearrangeGP-4562: breaking things downGP-4562: basics in placeGP-4562: oops
This commit is contained in:
@@ -9,7 +9,9 @@ src/main/py/LICENSE||GHIDRA||||END|
|
||||
src/main/py/MANIFEST.in||GHIDRA||||END|
|
||||
src/main/py/README.md||GHIDRA||||END|
|
||||
src/main/py/pyproject.toml||GHIDRA||||END|
|
||||
src/main/py/src/ghidradbg/dbgeng_base.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidradbg/dbgmodel/DbgModel.idl||GHIDRA||||END|
|
||||
src/main/py/src/ghidradbg/exdi/exdi.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidradbg/py.typed||GHIDRA||||END|
|
||||
src/main/py/src/ghidradbg/schema.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidradbg/schema_exdi.xml||GHIDRA||||END|
|
||||
|
||||
@@ -0,0 +1,49 @@
|
||||
## ###
|
||||
# IP: GHIDRA
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
##
|
||||
from merge_xml import merge
|
||||
import os
|
||||
import sys
|
||||
rmi_path = os.getcwd() + "/../../../../../../Debugger-rmi-trace/src/main/py/src/ghidratrace/"
|
||||
sys.path.append(rmi_path)
|
||||
|
||||
|
||||
def main():
|
||||
xml = rmi_path+"xml/"
|
||||
merge(xml_base="dbgeng_base.xml",
|
||||
xml_out="schema.xml",
|
||||
xml_updates=[
|
||||
xml+"sessions.xml",
|
||||
xml+"common.xml",
|
||||
xml+"nesting_adjustments.xml",
|
||||
xml+"available.xml",
|
||||
xml+"events.xml",
|
||||
xml+"breakpointsFlat.xml"
|
||||
])
|
||||
merge(xml_base="dbgeng_base.xml",
|
||||
xml_out="schema_exdi.xml",
|
||||
xml_updates=[
|
||||
xml+"sessions.xml",
|
||||
xml+"common.xml",
|
||||
xml+"nesting_adjustments.xml",
|
||||
xml+"available.xml",
|
||||
xml+"events.xml",
|
||||
xml+"breakpointsFlat.xml",
|
||||
os.getcwd()+"/exdi/exdi.xml"
|
||||
])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -245,10 +245,8 @@ def start_trace(name: str) -> None:
|
||||
if frame is None:
|
||||
raise AssertionError("cannot locate schema.xml")
|
||||
parent = os.path.dirname(inspect.getfile(frame))
|
||||
if util.is_exdi():
|
||||
schema_fn = os.path.join(parent, 'schema_exdi.xml')
|
||||
else:
|
||||
schema_fn = os.path.join(parent, 'schema.xml')
|
||||
schema_fn = os.path.join(parent, 'schema_exdi.xml' if util.is_exdi() else 'schema.xml')
|
||||
|
||||
with open(schema_fn, 'r') as schema_file:
|
||||
schema_xml = schema_file.read()
|
||||
using_dbgmodel = os.getenv('OPT_USE_DBGMODEL') == "true"
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
<context>
|
||||
<schema name="DbgRoot" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="EventScope" />
|
||||
<attribute name="Sessions" schema="SessionContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Settings" schema="ANY" />
|
||||
<attribute name="State" schema="State" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="Utility" schema="ANY" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Debug" schema="DebugBreakpointContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Handle" schema="STRING" fixed="yes" />
|
||||
<attribute name="Id" schema="STRING" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="Module" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="ToDisplayString" schema="BOOL" hidden="yes" />
|
||||
</schema>
|
||||
<schema name="MemoryRegion" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Base" schema="LONG" required="yes" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="DebugBreakpointContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Breakpoints" schema="BreakpointContainer" required="yes" />
|
||||
</schema>
|
||||
</context>
|
||||
@@ -0,0 +1,93 @@
|
||||
<context>
|
||||
<schema name="Session" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="ExdiProcesses" schema="ExdiProcessContainer" required="no" fixed="yes" />
|
||||
<attribute name="Memory" schema="Memory" required="no" fixed="yes" />
|
||||
<attribute name="Modules" schema="ModuleContainer" required="no" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Memory" schema="ProcessMemory" required="yes" fixed="yes" />
|
||||
<attribute name="Modules" schema="ProcessModuleContainer" required="yes" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="ProcessModuleContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<!-- interface name="ModuleContainer" /-->
|
||||
<element schema="ProcessModule" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="ProcessMemory" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<!-- interface name="Memory" /-->
|
||||
<element schema="ProcessMemoryRegion" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ProcessModule" elementResync="NEVER" attributeResync="NEVER">
|
||||
<!-- interface name="Module" /-->
|
||||
<element schema="VOID" />
|
||||
<attribute name="Sections" schema="SectionContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Symbols" schema="SymbolContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute name="Name" schema="STRING" />
|
||||
<attribute-alias from="_module_name" to="Name" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute name="ToDisplayString" schema="BOOL" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ProcessMemoryRegion" elementResync="NEVER" attributeResync="NEVER">
|
||||
<!-- interface name="MemoryRegion" /-->
|
||||
<element schema="VOID" />
|
||||
<attribute name="Base" schema="LONG" required="yes" fixed="yes" />
|
||||
<attribute name="Object File" schema="STRING" fixed="yes" />
|
||||
<attribute name="_readable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="_writable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="_executable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="Range" schema="RANGE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ExdiProcessContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="ExdiProcess" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute name="_base" schema="INT" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ExdiProcess" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Process" />
|
||||
<interface name="Aggregate" />
|
||||
<interface name="ExecutionStateful" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Threads" schema="ExdiThreadContainer" required="yes" fixed="yes" />
|
||||
<!-- attribute name="Modules" schema="ModuleContainer" required="yes" fixed="yes" /-->
|
||||
<attribute name="PID" schema="LONG" />
|
||||
<attribute-alias from="_pid" to="PID" />
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="OBJECT" />
|
||||
</schema>
|
||||
<schema name="ExdiThreadContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="ExdiThread" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute name="_base" schema="INT" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ExdiThread" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Thread" />
|
||||
<interface name="ExecutionStateful" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="TID" schema="LONG" />
|
||||
<attribute-alias from="_tid" to="TID" />
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="OBJECT" />
|
||||
</schema>
|
||||
</context>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -10,4 +10,5 @@ src/main/py/LICENSE||GHIDRA||||END|
|
||||
src/main/py/MANIFEST.in||GHIDRA||||END|
|
||||
src/main/py/README.md||GHIDRA||||END|
|
||||
src/main/py/pyproject.toml||GHIDRA||||END|
|
||||
src/main/py/src/ghidradrgn/drgn_base.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidradrgn/schema.xml||GHIDRA||||END|
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
## ###
|
||||
# IP: GHIDRA
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
##
|
||||
from merge_xml import merge
|
||||
import os
|
||||
import sys
|
||||
rmi_path = os.getcwd() + "/../../../../../../Debugger-rmi-trace/src/main/py/src/ghidratrace/"
|
||||
sys.path.append(rmi_path)
|
||||
|
||||
|
||||
def main():
|
||||
xml = rmi_path+"xml/"
|
||||
merge(xml_base="drgn_base.xml",
|
||||
xml_out="schema.xml",
|
||||
xml_updates=[
|
||||
xml+"common.xml"
|
||||
])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,39 @@
|
||||
<context>
|
||||
<schema name="DrgnRoot" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Processes" schema="ProcessContainer" required="yes" fixed="yes" />
|
||||
<attribute name="State" schema="ANY" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Symbols" schema="SymbolContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Handle" schema="STRING" fixed="yes" />
|
||||
<attribute name="Id" schema="STRING" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="Thread" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Environment" schema="ANY" fixed="yes" />
|
||||
<attribute name="Id" schema="STRING" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="Module" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="ToDisplayString" schema="BOOL" hidden="yes" />
|
||||
</schema>
|
||||
<schema name="StackFrame" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="PC" schema="ADDRESS" required="yes" />
|
||||
<attribute-alias from="_pc" to="PC" />
|
||||
<attribute name="SP" schema="ADDRESS" />
|
||||
<attribute name="Registers" schema="RegisterValueContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Locals" schema="LocalsContainer" required="yes" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="LocalsContainer" attributeResync="ONCE">
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="Local" />
|
||||
</schema>
|
||||
<schema name="Local" attributeResync="ONCE">
|
||||
<attribute name="Address" schema="ADDRESS" />
|
||||
<attribute name="Kind" schema="ANY" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
</context>
|
||||
@@ -1,183 +1,198 @@
|
||||
<?xml version="1.0"?>
|
||||
<context>
|
||||
<schema name="DrgnRoot" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Processes" schema="ProcessContainer" required="yes" fixed="yes" />
|
||||
<attribute name="State" schema="ANY" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Selectable" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="OBJECT" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ProcessContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Process" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="Process" />
|
||||
<interface name="Aggregate" />
|
||||
<interface name="ExecutionStateful" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Threads" schema="ThreadContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Symbols" schema="SymbolContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Exit Code" schema="LONG" />
|
||||
<attribute-alias from="_exit_code" to="Exit Code" />
|
||||
<attribute name="Environment" schema="Environment" required="yes" fixed="yes" />
|
||||
<attribute name="Memory" schema="Memory" required="yes" fixed="yes" />
|
||||
<attribute name="Modules" schema="ModuleContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Handle" schema="STRING" fixed="yes" />
|
||||
<attribute name="Id" schema="STRING" fixed="yes" />
|
||||
<attribute name="PID" schema="LONG" hidden="yes" />
|
||||
<attribute-alias from="_pid" to="PID" />
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="Environment" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Environment" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="OS" schema="STRING" />
|
||||
<attribute name="Arch" schema="STRING" />
|
||||
<attribute name="Endian" schema="STRING" />
|
||||
<attribute name="Debugger" schema="STRING" />
|
||||
<attribute-alias from="_os" to="OS" />
|
||||
<attribute-alias from="_arch" to="Arch" />
|
||||
<attribute-alias from="_endian" to="Endian" />
|
||||
<attribute-alias from="_debugger" to="Debugger" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ModuleContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Module" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="Memory" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Memory" />
|
||||
<element schema="MemoryRegion" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ThreadContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Thread" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="Thread" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="Thread" />
|
||||
<interface name="ExecutionStateful" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Stack" schema="Stack" required="yes" fixed="yes" />
|
||||
<attribute name="Environment" schema="ANY" fixed="yes" />
|
||||
<attribute name="Id" schema="STRING" fixed="yes" />
|
||||
<attribute name="TID" schema="LONG" />
|
||||
<attribute-alias from="_tid" to="TID" />
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="Module" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Module" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Sections" schema="SectionContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Symbols" schema="SymbolContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute name="Name" schema="STRING" />
|
||||
<attribute-alias from="_module_name" to="Name" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute name="ToDisplayString" schema="BOOL" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="MemoryRegion" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="MemoryRegion" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Object File" schema="STRING" fixed="yes" />
|
||||
<attribute name="_readable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="_writable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="_executable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="Range" schema="RANGE" required="yes" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="SectionContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Section" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Stack" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Stack" />
|
||||
<element schema="StackFrame" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="SymbolContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Symbol" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Symbol" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="StackFrame" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="StackFrame" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Function" schema="STRING" hidden="yes" />
|
||||
<attribute-alias from="_function" to="Function" />
|
||||
<attribute name="PC" schema="ADDRESS" required="yes" />
|
||||
<attribute-alias from="_pc" to="PC" />
|
||||
<attribute name="SP" schema="ADDRESS" />
|
||||
<attribute name="Registers" schema="RegisterValueContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Locals" schema="LocalsContainer" required="yes" fixed="yes" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="Section" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Section" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="Offset" schema="STRING" fixed="yes" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="RegisterValueContainer" attributeResync="ONCE">
|
||||
<interface name="RegisterContainer" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="LocalsContainer" attributeResync="ONCE">
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="Local" />
|
||||
</schema>
|
||||
<schema name="Local" attributeResync="ONCE">
|
||||
<attribute name="Address" schema="ADDRESS" />
|
||||
<attribute name="Kind" schema="ANY" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
</context>
|
||||
<!--This file was autogenerated using build_xml. DO NOT EDIT.-->
|
||||
<schema name="DrgnRoot" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Processes" schema="ProcessContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="State" schema="ANY"/>
|
||||
<attribute-alias from="_state" to="State"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Symbols" schema="SymbolContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Handle" schema="STRING" fixed="yes"/>
|
||||
<attribute name="Id" schema="STRING" fixed="yes"/>
|
||||
<interface name="Activatable"/>
|
||||
<interface name="Process"/>
|
||||
<interface name="Aggregate"/>
|
||||
<interface name="ExecutionStateful"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Threads" schema="ThreadContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Exit Code" schema="LONG"/>
|
||||
<attribute-alias from="_exit_code" to="Exit Code"/>
|
||||
<attribute name="Environment" schema="Environment" required="yes" fixed="yes"/>
|
||||
<attribute name="Memory" schema="Memory" required="yes" fixed="yes"/>
|
||||
<attribute name="Modules" schema="ModuleContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="PID" schema="LONG" hidden="yes"/>
|
||||
<attribute-alias from="_pid" to="PID"/>
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes"/>
|
||||
<attribute-alias from="_state" to="State"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Thread" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Environment" schema="ANY" fixed="yes"/>
|
||||
<attribute name="Id" schema="STRING" fixed="yes"/>
|
||||
<interface name="Activatable"/>
|
||||
<interface name="Thread"/>
|
||||
<interface name="ExecutionStateful"/>
|
||||
<interface name="Aggregate"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Stack" schema="Stack" required="yes" fixed="yes"/>
|
||||
<attribute name="TID" schema="LONG"/>
|
||||
<attribute-alias from="_tid" to="TID"/>
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes"/>
|
||||
<attribute-alias from="_state" to="State"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Module" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="ToDisplayString" schema="BOOL" hidden="yes"/>
|
||||
<interface name="Module"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Sections" schema="SectionContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Symbols" schema="SymbolContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Name" schema="STRING"/>
|
||||
<attribute-alias from="_module_name" to="Name"/>
|
||||
<attribute name="Range" schema="RANGE"/>
|
||||
<attribute-alias from="_range" to="Range"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="StackFrame" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="PC" schema="ADDRESS" required="yes"/>
|
||||
<attribute-alias from="_pc" to="PC"/>
|
||||
<attribute name="SP" schema="ADDRESS"/>
|
||||
<attribute name="Registers" schema="RegisterValueContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Locals" schema="LocalsContainer" required="yes" fixed="yes"/>
|
||||
<interface name="Activatable"/>
|
||||
<interface name="StackFrame"/>
|
||||
<interface name="Aggregate"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Function" schema="STRING" hidden="yes"/>
|
||||
<attribute-alias from="_function" to="Function"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="LocalsContainer" attributeResync="ONCE">
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="Local"/>
|
||||
</schema>
|
||||
<schema name="Local" attributeResync="ONCE">
|
||||
<attribute name="Address" schema="ADDRESS"/>
|
||||
<attribute name="Kind" schema="ANY" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Selectable" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="OBJECT"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="State" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="ProcessContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Process"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Environment" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Environment"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="OS" schema="STRING"/>
|
||||
<attribute name="Arch" schema="STRING"/>
|
||||
<attribute name="Endian" schema="STRING"/>
|
||||
<attribute name="Debugger" schema="STRING"/>
|
||||
<attribute-alias from="_os" to="OS"/>
|
||||
<attribute-alias from="_arch" to="Arch"/>
|
||||
<attribute-alias from="_endian" to="Endian"/>
|
||||
<attribute-alias from="_debugger" to="Debugger"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="ModuleContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Module"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Memory" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Memory"/>
|
||||
<element schema="MemoryRegion"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="ThreadContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Thread"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="MemoryRegion" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="MemoryRegion"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Offset" schema="STRING" fixed="yes"/>
|
||||
<attribute-alias from="_offset" to="Offset"/>
|
||||
<attribute name="Object File" schema="STRING" fixed="yes"/>
|
||||
<attribute-alias from="_objfile" to="Object File"/>
|
||||
<attribute name="Range" schema="RANGE" required="yes"/>
|
||||
<attribute-alias from="_range" to="Range"/>
|
||||
<attribute name="_readable" schema="BOOL" required="yes" hidden="yes"/>
|
||||
<attribute name="_writable" schema="BOOL" required="yes" hidden="yes"/>
|
||||
<attribute name="_executable" schema="BOOL" required="yes" hidden="yes"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="SectionContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Section"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Stack" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Stack"/>
|
||||
<element schema="StackFrame"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="SymbolContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Symbol"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Symbol" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Section" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Section"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Range" schema="RANGE"/>
|
||||
<attribute-alias from="_range" to="Range"/>
|
||||
<attribute name="Offset" schema="STRING" fixed="yes"/>
|
||||
<attribute-alias from="_offset" to="Offset"/>
|
||||
<attribute name="Module" schema="Module" fixed="yes" hidden="yes"/>
|
||||
<attribute-alias from="_module" to="Module"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="RegisterValueContainer" canonical="yes" attributeResync="ONCE">
|
||||
<interface name="RegisterContainer"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
</schema>
|
||||
<schema name="Register">
|
||||
<interface name="Register"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
</context>
|
||||
|
||||
@@ -14,6 +14,7 @@ src/main/py/LICENSE||GHIDRA||||END|
|
||||
src/main/py/MANIFEST.in||GHIDRA||||END|
|
||||
src/main/py/README.md||GHIDRA||||END|
|
||||
src/main/py/pyproject.toml||GHIDRA||||END|
|
||||
src/main/py/src/ghidragdb/gdb_base.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidragdb/py.typed||GHIDRA||||END|
|
||||
src/main/py/src/ghidragdb/schema.xml||GHIDRA||||END|
|
||||
src/main/py/tests/EMPTY||GHIDRA||||END|
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
## ###
|
||||
# IP: GHIDRA
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
##
|
||||
from merge_xml import merge
|
||||
import os
|
||||
import sys
|
||||
rmi_path = os.getcwd() + "/../../../../../../Debugger-rmi-trace/src/main/py/src/ghidratrace/"
|
||||
sys.path.append(rmi_path)
|
||||
|
||||
|
||||
def main():
|
||||
xml = rmi_path+"xml/"
|
||||
merge(xml_base="gdb_base.xml",
|
||||
xml_out="schema.xml",
|
||||
xml_updates=[
|
||||
xml+"common.xml",
|
||||
xml+"available.xml",
|
||||
xml+"breakpointsTiered.xml"
|
||||
])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -296,10 +296,12 @@ def start_trace(name: str) -> None:
|
||||
frame = inspect.currentframe()
|
||||
if frame is None:
|
||||
raise AssertionError("cannot locate schema.xml")
|
||||
|
||||
parent = os.path.dirname(inspect.getfile(frame))
|
||||
schema_fn = os.path.join(parent, 'schema.xml')
|
||||
with open(schema_fn, 'r') as schema_file:
|
||||
schema_xml = schema_file.read()
|
||||
|
||||
with STATE.trace.open_tx("Create Root Object"):
|
||||
root = STATE.trace.create_root_object(schema_xml, 'GdbSession')
|
||||
root.set_value('_display', 'GNU gdb ' + util.GDB_VERSION.full)
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
<context>
|
||||
<schema name="GdbSession" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="EventScope" />
|
||||
<interface name="FocusScope" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Inferiors" schema="ProcessContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Available" schema="AvailableContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Breakpoints" schema="BreakpointContainer" required="yes" fixed="yes" />
|
||||
<attribute name="_event_thread" schema="OBJECT" hidden="yes" />
|
||||
<attribute name="_focus" schema="Selectable" required="yes" hidden="yes" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Breakpoints" schema="BreakpointLocationContainer" required="yes" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="StackFrame" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Registers" schema="RegisterValueContainer" required="yes" fixed="yes" />
|
||||
<attribute name="PC" schema="ADDRESS" required="yes" />
|
||||
<attribute-alias from="_pc" to="PC" />
|
||||
</schema>
|
||||
<schema name="RegisterValueContainer" attributeResync="ONCE">
|
||||
<attribute schema="Register" />
|
||||
</schema>
|
||||
</context>
|
||||
|
||||
@@ -310,11 +310,11 @@ class Environment(TraceObject):
|
||||
pass
|
||||
|
||||
|
||||
class Inferior(TraceObject):
|
||||
class Process(TraceObject):
|
||||
pass
|
||||
|
||||
|
||||
class InferiorContainer(TraceObject):
|
||||
class ProcessContainer(TraceObject):
|
||||
pass
|
||||
|
||||
|
||||
@@ -372,7 +372,7 @@ def refresh_breakpoints(node: BreakpointContainer) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method(action='refresh', display='Refresh Inferiors')
|
||||
def refresh_inferiors(node: InferiorContainer) -> None:
|
||||
def refresh_inferiors(node: ProcessContainer) -> None:
|
||||
"""Refresh the list of inferiors."""
|
||||
with commands.open_tracked_tx('Refresh Inferiors'):
|
||||
gdb.execute('ghidra trace put-inferiors')
|
||||
@@ -461,7 +461,7 @@ def refresh_sections(node: Module) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method(action='activate', display="Activate Inferior")
|
||||
def activate_inferior(inferior: Inferior) -> None:
|
||||
def activate_inferior(inferior: Process) -> None:
|
||||
"""Switch to the inferior."""
|
||||
switch_inferior(find_inf_by_obj(inferior))
|
||||
|
||||
@@ -481,13 +481,13 @@ def activate_frame(frame: StackFrame) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method(display='Add Inferior')
|
||||
def add_inferior(container: InferiorContainer) -> None:
|
||||
def add_inferior(container: ProcessContainer) -> None:
|
||||
"""Add a new inferior."""
|
||||
gdb.execute('add-inferior')
|
||||
|
||||
|
||||
@REGISTRY.method(action='delete', display="Delete Inferior")
|
||||
def delete_inferior(inferior: Inferior) -> None:
|
||||
def delete_inferior(inferior: Process) -> None:
|
||||
"""Remove the inferior."""
|
||||
inf = find_inf_by_obj(inferior)
|
||||
gdb.execute(f'remove-inferior {inf.num}')
|
||||
@@ -495,7 +495,7 @@ def delete_inferior(inferior: Inferior) -> None:
|
||||
|
||||
# TODO: Separate method for each of core, exec, remote, etc...?
|
||||
@REGISTRY.method(display='Connect Target')
|
||||
def connect(inferior: Inferior, spec: str) -> None:
|
||||
def connect(inferior: Process, spec: str) -> None:
|
||||
"""Connect to a target machine or process."""
|
||||
switch_inferior(find_inf_by_obj(inferior))
|
||||
gdb.execute(f'target {spec}')
|
||||
@@ -510,21 +510,21 @@ def attach_obj(target: Attachable) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method(action='attach', display='Attach by PID')
|
||||
def attach_pid(inferior: Inferior, pid: int) -> None:
|
||||
def attach_pid(inferior: Process, pid: int) -> None:
|
||||
"""Attach the inferior to the given target."""
|
||||
switch_inferior(find_inf_by_obj(inferior))
|
||||
gdb.execute(f'attach {pid}')
|
||||
|
||||
|
||||
@REGISTRY.method(display='Detach')
|
||||
def detach(inferior: Inferior) -> None:
|
||||
def detach(inferior: Process) -> None:
|
||||
"""Detach the inferior's target."""
|
||||
switch_inferior(find_inf_by_obj(inferior))
|
||||
gdb.execute('detach')
|
||||
|
||||
|
||||
@REGISTRY.method(action='launch', display='Launch at main')
|
||||
def launch_main(inferior: Inferior,
|
||||
def launch_main(inferior: Process,
|
||||
file: Annotated[str, ParamDesc(display='File')],
|
||||
args: Annotated[str, ParamDesc(display='Arguments')] = '') -> None:
|
||||
"""Start a native process with the given command line, stopping at 'main'
|
||||
@@ -542,7 +542,7 @@ def launch_main(inferior: Inferior,
|
||||
|
||||
@REGISTRY.method(action='launch', display='Launch at Loader',
|
||||
condition=util.GDB_VERSION.major >= 9)
|
||||
def launch_loader(inferior: Inferior,
|
||||
def launch_loader(inferior: Process,
|
||||
file: Annotated[str, ParamDesc(display='File')],
|
||||
args: Annotated[str, ParamDesc(display='Arguments')] = '') -> None:
|
||||
"""Start a native process with the given command line, stopping at first
|
||||
@@ -556,7 +556,7 @@ def launch_loader(inferior: Inferior,
|
||||
|
||||
|
||||
@REGISTRY.method(action='launch', display='Launch and Run')
|
||||
def launch_run(inferior: Inferior,
|
||||
def launch_run(inferior: Process,
|
||||
file: Annotated[str, ParamDesc(display='File')],
|
||||
args: Annotated[str, ParamDesc(display='Arguments')] = '') -> None:
|
||||
"""Run a native process with the given command line (run).
|
||||
@@ -573,7 +573,7 @@ def launch_run(inferior: Inferior,
|
||||
|
||||
|
||||
@REGISTRY.method()
|
||||
def kill(inferior: Inferior) -> None:
|
||||
def kill(inferior: Process) -> None:
|
||||
"""Kill execution of the inferior."""
|
||||
switch_inferior(find_inf_by_obj(inferior))
|
||||
with no_confirm():
|
||||
@@ -581,7 +581,7 @@ def kill(inferior: Inferior) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method()
|
||||
def resume(inferior: Inferior) -> None:
|
||||
def resume(inferior: Process) -> None:
|
||||
"""Continue execution of the inferior."""
|
||||
switch_inferior(find_inf_by_obj(inferior))
|
||||
gdb.execute('continue')
|
||||
@@ -589,7 +589,7 @@ def resume(inferior: Inferior) -> None:
|
||||
|
||||
@REGISTRY.method(action='step_ext', icon='icon.debugger.resume.back',
|
||||
condition=util.IS_TRACE)
|
||||
def resume_back(inferior: Inferior) -> None:
|
||||
def resume_back(inferior: Process) -> None:
|
||||
"""Continue execution of the inferior backwards."""
|
||||
gdb.execute('reverse-continue')
|
||||
|
||||
@@ -598,7 +598,7 @@ def resume_back(inferior: Inferior) -> None:
|
||||
# is the current inferior. This in turn queues the UI to enable or disable the
|
||||
# button appropriately
|
||||
@REGISTRY.method()
|
||||
def interrupt(inferior: Inferior) -> None:
|
||||
def interrupt(inferior: Process) -> None:
|
||||
"""Interrupt the execution of the debugged program."""
|
||||
gdb.execute('interrupt')
|
||||
|
||||
@@ -663,7 +663,7 @@ def step_back_over(thread: Thread,
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_sw_execute')
|
||||
def break_sw_execute_address(inferior: Inferior, address: Address) -> None:
|
||||
def break_sw_execute_address(inferior: Process, address: Address) -> None:
|
||||
"""Set a breakpoint (break)."""
|
||||
inf = find_inf_by_obj(inferior)
|
||||
offset = inferior.trace.extra.require_mm().map_back(inf, address)
|
||||
@@ -678,7 +678,7 @@ def break_sw_execute_expression(expression: str) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_hw_execute')
|
||||
def break_hw_execute_address(inferior: Inferior, address: Address) -> None:
|
||||
def break_hw_execute_address(inferior: Process, address: Address) -> None:
|
||||
"""Set a hardware-assisted breakpoint (hbreak)."""
|
||||
inf = find_inf_by_obj(inferior)
|
||||
offset = inferior.trace.extra.require_mm().map_back(inf, address)
|
||||
@@ -693,7 +693,7 @@ def break_hw_execute_expression(expression: str) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_read')
|
||||
def break_read_range(inferior: Inferior, range: AddressRange) -> None:
|
||||
def break_read_range(inferior: Process, range: AddressRange) -> None:
|
||||
"""Set a read watchpoint (rwatch)."""
|
||||
inf = find_inf_by_obj(inferior)
|
||||
offset_start = inferior.trace.extra.require_mm().map_back(
|
||||
@@ -709,7 +709,7 @@ def break_read_expression(expression: str) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_write')
|
||||
def break_write_range(inferior: Inferior, range: AddressRange) -> None:
|
||||
def break_write_range(inferior: Process, range: AddressRange) -> None:
|
||||
"""Set a watchpoint (watch)."""
|
||||
inf = find_inf_by_obj(inferior)
|
||||
offset_start = inferior.trace.extra.require_mm().map_back(
|
||||
@@ -725,7 +725,7 @@ def break_write_expression(expression: str) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_access')
|
||||
def break_access_range(inferior: Inferior, range: AddressRange) -> None:
|
||||
def break_access_range(inferior: Process, range: AddressRange) -> None:
|
||||
"""Set an access watchpoint (awatch)."""
|
||||
inf = find_inf_by_obj(inferior)
|
||||
offset_start = inferior.trace.extra.require_mm().map_back(
|
||||
@@ -741,7 +741,7 @@ def break_access_expression(expression: str) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_ext', display='Catch Event')
|
||||
def break_ext_event(inferior: Inferior,
|
||||
def break_ext_event(inferior: Process,
|
||||
spec: Annotated[str, ParamDesc(display='Type')]) -> None:
|
||||
"""Set a generic catchpoint (catch)."""
|
||||
gdb.execute(f'catch {spec}')
|
||||
@@ -756,7 +756,7 @@ def break_event(container: BreakpointContainer,
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_ext', display='Catch Signal')
|
||||
def break_ext_signal(inferior: Inferior, signal: Annotated[
|
||||
def break_ext_signal(inferior: Process, signal: Annotated[
|
||||
str, ParamDesc(display='Signal (opt)')]) -> None:
|
||||
"""Set a signal catchpoint (catch signal)."""
|
||||
gdb.execute(f'catch signal {signal}')
|
||||
@@ -770,7 +770,7 @@ def break_signal(container: BreakpointContainer, signal: Annotated[
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_ext', display='Catch Syscall')
|
||||
def break_ext_syscall(inferior: Inferior, syscall: Annotated[
|
||||
def break_ext_syscall(inferior: Process, syscall: Annotated[
|
||||
str, ParamDesc(display='Syscall (opt)')]) -> None:
|
||||
"""Set a syscall catchpoint (catch syscall))."""
|
||||
gdb.execute(f'catch syscall {syscall}')
|
||||
@@ -784,7 +784,7 @@ def break_syscall(container: BreakpointContainer, syscall: Annotated[
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_ext', display='Catch Load')
|
||||
def break_ext_load(inferior: Inferior, library: Annotated[
|
||||
def break_ext_load(inferior: Process, library: Annotated[
|
||||
str, ParamDesc(display='Library (opt)')]) -> None:
|
||||
"""Set a load catchpoint (catch load))."""
|
||||
gdb.execute(f'catch load {library}')
|
||||
@@ -798,7 +798,7 @@ def break_load(container: BreakpointContainer, library: Annotated[
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_ext', display='Catch Unload')
|
||||
def break_ext_unload(inferior: Inferior,
|
||||
def break_ext_unload(inferior: Process,
|
||||
library: Annotated[
|
||||
str, ParamDesc(display='Library (opt)')]) -> None:
|
||||
"""Set a unload catchpoint (catch unload))."""
|
||||
@@ -813,7 +813,7 @@ def break_unload(container: BreakpointContainer, library: Annotated[
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_ext', display='Catch Catch')
|
||||
def break_ext_catch(inferior: Inferior, exception: Annotated[
|
||||
def break_ext_catch(inferior: Process, exception: Annotated[
|
||||
str, ParamDesc(display='Exception (opt)')]) -> None:
|
||||
"""Set a catch catchpoint (catch catch))."""
|
||||
gdb.execute(f'catch catch {exception}')
|
||||
@@ -827,7 +827,7 @@ def break_catch(container: BreakpointContainer, exception: Annotated[
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_ext', display='Catch Throw')
|
||||
def break_ext_throw(inferior: Inferior, exception: Annotated[
|
||||
def break_ext_throw(inferior: Process, exception: Annotated[
|
||||
str, ParamDesc(display='Exception (opt)')]) -> None:
|
||||
"""Set a throw catchpoint (catch throw))."""
|
||||
gdb.execute(f'catch throw {exception}')
|
||||
@@ -841,7 +841,7 @@ def break_throw(container: BreakpointContainer, exception: Annotated[
|
||||
|
||||
|
||||
@REGISTRY.method(action='break_ext', display='Catch Rethrow')
|
||||
def break_ext_rethrow(inferior: Inferior, exception: Annotated[
|
||||
def break_ext_rethrow(inferior: Process, exception: Annotated[
|
||||
str, ParamDesc(display='Exception (opt)')]) -> None:
|
||||
"""Set a rethrow catchpoint (catch rethrow))."""
|
||||
gdb.execute(f'catch rethrow {exception}')
|
||||
@@ -902,7 +902,7 @@ def delete_breakpoint(breakpoint: BreakpointSpec) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method()
|
||||
def read_mem(inferior: Inferior, range: AddressRange) -> None:
|
||||
def read_mem(inferior: Process, range: AddressRange) -> None:
|
||||
"""Read memory."""
|
||||
inf = find_inf_by_obj(inferior)
|
||||
offset_start = inferior.trace.extra.require_mm().map_back(
|
||||
@@ -917,7 +917,7 @@ def read_mem(inferior: Inferior, range: AddressRange) -> None:
|
||||
|
||||
|
||||
@REGISTRY.method()
|
||||
def write_mem(inferior: Inferior, address: Address, data: bytes) -> None:
|
||||
def write_mem(inferior: Process, address: Address, data: bytes) -> None:
|
||||
"""Write memory."""
|
||||
inf = find_inf_by_obj(inferior)
|
||||
offset = inferior.trace.extra.require_mm().map_back(inf, address)
|
||||
|
||||
@@ -1,233 +1,243 @@
|
||||
<?xml version="1.0"?>
|
||||
<context>
|
||||
<schema name="GdbSession" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="EventScope" />
|
||||
<interface name="FocusScope" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Inferiors" schema="InferiorContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Available" schema="AvailableContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Breakpoints" schema="BreakpointContainer" required="yes" fixed="yes" />
|
||||
<attribute name="_event_thread" schema="OBJECT" hidden="yes" />
|
||||
<attribute name="_focus" schema="Selectable" required="yes" hidden="yes" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Selectable" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="OBJECT" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="BreakpointContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="BreakpointSpec" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="AvailableContainer" canonical="yes" elementResync="ALWAYS" attributeResync="NEVER">
|
||||
<element schema="Attachable" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="InferiorContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Inferior" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="BreakpointSpec" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="BreakpointSpec" />
|
||||
<interface name="Togglable" />
|
||||
<element schema="BreakpointLocation" />
|
||||
<attribute name="Expression" schema="STRING" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_expression" to="Expression" />
|
||||
<attribute name="Kinds" schema="STRING" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_kinds" to="Kinds" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute name="Enabled" schema="BOOL" />
|
||||
<attribute-alias from="_enabled" to="Enabled" />
|
||||
<attribute name="Commands" schema="STRING" />
|
||||
<attribute name="Condition" schema="STRING" />
|
||||
<attribute name="Hit Count" schema="INT" />
|
||||
<attribute name="Ignore Count" schema="INT" />
|
||||
<attribute name="Pending" schema="BOOL" />
|
||||
<attribute name="Silent" schema="BOOL" />
|
||||
<attribute name="Temporary" schema="BOOL" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Attachable" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID" />
|
||||
<attribute name="PID" schema="LONG" />
|
||||
<attribute-alias from="_pid" to="PID" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Inferior" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="Process" />
|
||||
<interface name="Aggregate" />
|
||||
<interface name="ExecutionStateful" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Threads" schema="ThreadContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Breakpoints" schema="BreakpointLocationContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Exit Code" schema="LONG" />
|
||||
<attribute-alias from="_exit_code" to="Exit Code" />
|
||||
<attribute name="Environment" schema="Environment" required="yes" fixed="yes" />
|
||||
<attribute name="Memory" schema="Memory" required="yes" fixed="yes" />
|
||||
<attribute name="Modules" schema="ModuleContainer" required="yes" fixed="yes" />
|
||||
<attribute name="PID" schema="LONG" hidden="yes" />
|
||||
<attribute-alias from="_pid" to="PID" />
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Environment" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Environment" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="OS" schema="STRING" />
|
||||
<attribute name="Arch" schema="STRING" />
|
||||
<attribute name="Endian" schema="STRING" />
|
||||
<attribute name="Debugger" schema="STRING" />
|
||||
<attribute-alias from="_os" to="OS" />
|
||||
<attribute-alias from="_arch" to="Arch" />
|
||||
<attribute-alias from="_endian" to="Endian" />
|
||||
<attribute-alias from="_debugger" to="Debugger" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ModuleContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Module" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Memory" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Memory" />
|
||||
<element schema="MemoryRegion" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="BreakpointLocation" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="BreakpointLocation" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Enabled" schema="BOOL" />
|
||||
<attribute-alias from="_enabled" to="Enabled" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="BreakpointLocationContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="BreakpointLocation" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ThreadContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Thread" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Thread" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="Thread" />
|
||||
<interface name="ExecutionStateful" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Stack" schema="Stack" required="yes" fixed="yes" />
|
||||
<attribute name="TID" schema="LONG" />
|
||||
<attribute-alias from="_tid" to="TID" />
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Module" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Module" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Sections" schema="SectionContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Symbols" schema="SymbolContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute name="Name" schema="STRING" />
|
||||
<attribute-alias from="_module_name" to="Name" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="MemoryRegion" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="MemoryRegion" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Offset" schema="STRING" fixed="yes" />
|
||||
<attribute-alias from="_offset" to="Offset" />
|
||||
<attribute name="Object File" schema="STRING" fixed="yes" />
|
||||
<attribute-alias from="_objfile" to="Object File" />
|
||||
<attribute name="_readable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="_writable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="_executable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="Range" schema="RANGE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="SectionContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Section" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Stack" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Stack" />
|
||||
<element schema="StackFrame" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="SymbolContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Symbol" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Symbol" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="StackFrame" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="StackFrame" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Registers" schema="RegisterValueContainer" required="yes" fixed="yes" />
|
||||
<attribute name="PC" schema="ADDRESS" required="yes" />
|
||||
<attribute-alias from="_pc" to="PC" />
|
||||
<attribute name="Function" schema="STRING" hidden="yes" />
|
||||
<attribute-alias from="_function" to="Function" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Section" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Section" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute name="Module" schema="Module" required="yes" fixed="yes" hidden="yes" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="Offset" schema="STRING" fixed="yes" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="RegisterValueContainer" attributeResync="NEVER">
|
||||
<interface name="RegisterContainer" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="Register" />
|
||||
</schema>
|
||||
<schema name="Register">
|
||||
<interface name="Register" />
|
||||
</schema>
|
||||
</context>
|
||||
<!--This file was autogenerated using build_xml. DO NOT EDIT.-->
|
||||
<schema name="GdbSession" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="EventScope"/>
|
||||
<interface name="FocusScope"/>
|
||||
<interface name="Aggregate"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Inferiors" schema="ProcessContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Available" schema="AvailableContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Breakpoints" schema="BreakpointContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="_event_thread" schema="OBJECT" hidden="yes"/>
|
||||
<attribute name="_focus" schema="Selectable" required="yes" hidden="yes"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Breakpoints" schema="BreakpointLocationContainer" required="yes" fixed="yes"/>
|
||||
<interface name="Activatable"/>
|
||||
<interface name="Process"/>
|
||||
<interface name="Aggregate"/>
|
||||
<interface name="ExecutionStateful"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Threads" schema="ThreadContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Exit Code" schema="LONG"/>
|
||||
<attribute-alias from="_exit_code" to="Exit Code"/>
|
||||
<attribute name="Environment" schema="Environment" required="yes" fixed="yes"/>
|
||||
<attribute name="Memory" schema="Memory" required="yes" fixed="yes"/>
|
||||
<attribute name="Modules" schema="ModuleContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="PID" schema="LONG" hidden="yes"/>
|
||||
<attribute-alias from="_pid" to="PID"/>
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes"/>
|
||||
<attribute-alias from="_state" to="State"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="StackFrame" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Registers" schema="RegisterValueContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="PC" schema="ADDRESS" required="yes"/>
|
||||
<attribute-alias from="_pc" to="PC"/>
|
||||
<interface name="Activatable"/>
|
||||
<interface name="StackFrame"/>
|
||||
<interface name="Aggregate"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Function" schema="STRING" hidden="yes"/>
|
||||
<attribute-alias from="_function" to="Function"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="RegisterValueContainer" attributeResync="ONCE">
|
||||
<attribute schema="Register"/>
|
||||
<interface name="RegisterContainer"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
</schema>
|
||||
<schema name="Selectable" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="OBJECT"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="State" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="ProcessContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Process"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Environment" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Environment"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="OS" schema="STRING"/>
|
||||
<attribute name="Arch" schema="STRING"/>
|
||||
<attribute name="Endian" schema="STRING"/>
|
||||
<attribute name="Debugger" schema="STRING"/>
|
||||
<attribute-alias from="_os" to="OS"/>
|
||||
<attribute-alias from="_arch" to="Arch"/>
|
||||
<attribute-alias from="_endian" to="Endian"/>
|
||||
<attribute-alias from="_debugger" to="Debugger"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="ModuleContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Module"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Memory" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Memory"/>
|
||||
<element schema="MemoryRegion"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="ThreadContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Thread"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Thread" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable"/>
|
||||
<interface name="Thread"/>
|
||||
<interface name="ExecutionStateful"/>
|
||||
<interface name="Aggregate"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Stack" schema="Stack" required="yes" fixed="yes"/>
|
||||
<attribute name="TID" schema="LONG"/>
|
||||
<attribute-alias from="_tid" to="TID"/>
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes"/>
|
||||
<attribute-alias from="_state" to="State"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Module" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Module"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Sections" schema="SectionContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Symbols" schema="SymbolContainer" required="yes" fixed="yes"/>
|
||||
<attribute name="Name" schema="STRING"/>
|
||||
<attribute-alias from="_module_name" to="Name"/>
|
||||
<attribute name="Range" schema="RANGE"/>
|
||||
<attribute-alias from="_range" to="Range"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="MemoryRegion" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="MemoryRegion"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Offset" schema="STRING" fixed="yes"/>
|
||||
<attribute-alias from="_offset" to="Offset"/>
|
||||
<attribute name="Object File" schema="STRING" fixed="yes"/>
|
||||
<attribute-alias from="_objfile" to="Object File"/>
|
||||
<attribute name="Range" schema="RANGE" required="yes"/>
|
||||
<attribute-alias from="_range" to="Range"/>
|
||||
<attribute name="_readable" schema="BOOL" required="yes" hidden="yes"/>
|
||||
<attribute name="_writable" schema="BOOL" required="yes" hidden="yes"/>
|
||||
<attribute name="_executable" schema="BOOL" required="yes" hidden="yes"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="SectionContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Section"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Stack" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Stack"/>
|
||||
<element schema="StackFrame"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="SymbolContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Symbol"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Symbol" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Section" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Section"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Range" schema="RANGE"/>
|
||||
<attribute-alias from="_range" to="Range"/>
|
||||
<attribute name="Offset" schema="STRING" fixed="yes"/>
|
||||
<attribute-alias from="_offset" to="Offset"/>
|
||||
<attribute name="Module" schema="Module" fixed="yes" hidden="yes"/>
|
||||
<attribute-alias from="_module" to="Module"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Register">
|
||||
<interface name="Register"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="AvailableContainer" canonical="yes" elementResync="ALWAYS" attributeResync="NEVER">
|
||||
<element schema="Attachable"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="Attachable" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID"/>
|
||||
<attribute name="PID" schema="LONG"/>
|
||||
<attribute-alias from="_pid" to="PID"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="BreakpointContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="BreakpointSpec"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
<schema name="BreakpointSpec" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="BreakpointSpec"/>
|
||||
<interface name="Togglable"/>
|
||||
<element schema="BreakpointLocation"/>
|
||||
<attribute name="Expression" schema="STRING" hidden="yes"/>
|
||||
<attribute-alias from="_expression" to="Expression"/>
|
||||
<attribute name="Kinds" schema="STRING" required="yes" hidden="yes"/>
|
||||
<attribute-alias from="_kinds" to="Kinds"/>
|
||||
<attribute name="Enabled" schema="BOOL" required="yes"/>
|
||||
<attribute-alias from="_enabled" to="Enabled"/>
|
||||
<attribute name="Commands" schema="STRING"/>
|
||||
<attribute name="Condition" schema="STRING"/>
|
||||
<attribute name="Hit Count" schema="INT"/>
|
||||
<attribute name="Ignore Count" schema="INT"/>
|
||||
<attribute name="Pending" schema="BOOL"/>
|
||||
<attribute name="Silent" schema="BOOL"/>
|
||||
<attribute name="Temporary" schema="BOOL"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="BreakpointLocation" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="BreakpointLocation"/>
|
||||
<element schema="VOID"/>
|
||||
<attribute name="Range" schema="RANGE"/>
|
||||
<attribute-alias from="_range" to="Range"/>
|
||||
<attribute name="_display" schema="STRING" hidden="yes"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute name="Enabled" schema="BOOL"/>
|
||||
<attribute-alias from="_enabled" to="Enabled"/>
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="BreakpointLocationContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="BreakpointLocation"/>
|
||||
<attribute name="_order" schema="INT" hidden="yes"/>
|
||||
<attribute schema="VOID"/>
|
||||
</schema>
|
||||
</context>
|
||||
|
||||
@@ -11,5 +11,6 @@ src/main/py/LICENSE||GHIDRA||||END|
|
||||
src/main/py/MANIFEST.in||GHIDRA||||END|
|
||||
src/main/py/README.md||GHIDRA||||END|
|
||||
src/main/py/pyproject.toml||GHIDRA||||END|
|
||||
src/main/py/src/ghidralldb/lldb_base.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidralldb/py.typed||GHIDRA||||END|
|
||||
src/main/py/src/ghidralldb/schema.xml||GHIDRA||||END|
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
## ###
|
||||
# IP: GHIDRA
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
##
|
||||
from merge_xml import merge
|
||||
import os
|
||||
import sys
|
||||
rmi_path = os.getcwd() + "/../../../../../../Debugger-rmi-trace/src/main/py/src/ghidratrace/"
|
||||
sys.path.append(rmi_path)
|
||||
|
||||
|
||||
def main():
|
||||
xml = rmi_path+"xml/"
|
||||
merge(xml_base="lldb_base.xml",
|
||||
xml_out="schema.xml",
|
||||
xml_updates=[
|
||||
xml+"common.xml",
|
||||
xml+"available.xml",
|
||||
xml+"breakpointsTiered.xml"
|
||||
])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,68 @@
|
||||
<context>
|
||||
<schema name="LldbSession" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="EventScope" />
|
||||
<interface name="FocusScope" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Processes" schema="ProcessContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Available" schema="AvailableContainer" required="yes" fixed="yes" />
|
||||
<attribute name="_event_thread" schema="OBJECT" hidden="yes" />
|
||||
<attribute name="_focus" schema="Selectable" required="yes" hidden="yes" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Breakpoints" schema="BreakpointContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Watchpoints" schema="WatchpointContainer" required="yes" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="Environment" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="os" schema="STRING" />
|
||||
</schema>
|
||||
<schema name="Thread" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Name" schema="STRING" />
|
||||
</schema>
|
||||
<schema name="WatchpointContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="WatchpointSpec" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="WatchpointSpec" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="BreakpointSpec" />
|
||||
<interface name="BreakpointLocation" />
|
||||
<interface name="Togglable" />
|
||||
<attribute name="Expression" schema="STRING" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_expression" to="Expression" />
|
||||
<attribute name="Kinds" schema="STRING" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_kinds" to="Kinds" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute name="Enabled" schema="BOOL" />
|
||||
<attribute-alias from="_enabled" to="Enabled" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="Condition" schema="STRING" />
|
||||
<attribute name="Hit Count" schema="INT" />
|
||||
<attribute name="Ignore Count" schema="INT" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="StackFrame" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Registers" schema="RegisterValueContainer" required="yes" fixed="yes" />
|
||||
<attribute name="PC" schema="ADDRESS" required="yes" />
|
||||
<attribute-alias from="_pc" to="PC" />
|
||||
</schema>
|
||||
<schema name="RegisterValueContainer" attributeResync="ONCE">
|
||||
<attribute name="General Purpose Registers" schema="RegisterBank" />
|
||||
<attribute name="Floating Point Registers" schema="RegisterBank" />
|
||||
<attribute name="Advanced Vector Extensions" schema="RegisterBank" />
|
||||
<attribute name="Memory Protection Extensions" schema="RegisterBank" />
|
||||
<attribute name="float" schema="RegisterBank" />
|
||||
<attribute name="general" schema="RegisterBank" />
|
||||
<attribute name="system" schema="RegisterBank" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="RegisterBank" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="Register" />
|
||||
</schema>
|
||||
</context>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -11,3 +11,4 @@ src/main/py/README.md||GHIDRA||||END|
|
||||
src/main/py/pyproject.toml||GHIDRA||||END|
|
||||
src/main/py/src/ghidraxdbg/py.typed||GHIDRA||||END|
|
||||
src/main/py/src/ghidraxdbg/schema.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidraxdbg/x64dbg_base.xml||GHIDRA||||END|
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
## ###
|
||||
# IP: GHIDRA
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
##
|
||||
from merge_xml import merge
|
||||
import os
|
||||
import sys
|
||||
rmi_path = os.getcwd() + "/../../../../../../Debugger-rmi-trace/src/main/py/src/ghidratrace/"
|
||||
sys.path.append(rmi_path)
|
||||
|
||||
|
||||
def main():
|
||||
xml = rmi_path+"xml/"
|
||||
merge(xml_base="x64dbg_base.xml",
|
||||
xml_out="schema.xml",
|
||||
xml_updates=[
|
||||
xml+"sessions.xml",
|
||||
xml+"common.xml",
|
||||
xml+"nesting_adjustments.xml",
|
||||
xml+"available.xml",
|
||||
xml+"events.xml",
|
||||
xml+"breakpointsFlat.xml"
|
||||
])
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,33 @@
|
||||
<context>
|
||||
<schema name="X64DbgRoot" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="EventScope" />
|
||||
<attribute name="Sessions" schema="SessionContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Settings" schema="ANY" />
|
||||
<attribute name="State" schema="State" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="Utility" schema="ANY" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Debug" schema="DebugBreakpointContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Handle" schema="STRING" fixed="yes" />
|
||||
<attribute name="Id" schema="STRING" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="Module" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="ToDisplayString" schema="BOOL" hidden="yes" />
|
||||
</schema>
|
||||
<schema name="MemoryRegion" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Base" schema="LONG" required="yes" fixed="yes" />
|
||||
</schema>
|
||||
<schema name="DebugBreakpointContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Software Breakpoints" schema="BreakpointContainer" required="yes" />
|
||||
<attribute name="Hardware Breakpoints" schema="BreakpointContainer" required="yes" />
|
||||
<attribute name="Memory Breakpoints" schema="BreakpointContainer" required="yes" />
|
||||
</schema>
|
||||
<schema name="BreakpointSpec" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Name" schema="STRING" hidden="yes" />
|
||||
<attribute-alias from="_name" to="Name" />
|
||||
</schema>
|
||||
</context>
|
||||
@@ -310,3 +310,16 @@ The process parameter, if accepted, is technically redundant.
|
||||
Because all address spaces among all targets must be unique, the address space encodes the process (or other target object).
|
||||
If taken, the back end must validate that the address space belongs to the given process.
|
||||
Otherwise, the back end must figure out the applicable target based on the space name.
|
||||
|
||||
|
||||
# Regarding the composition of schema
|
||||
|
||||
Schema are now composable, i.e. the schema.xml files used by each debugger-agent may be reconstituted from smaller
|
||||
fragments, typically stored in a combination of each agent's python src directory and the common store, "ghidratrace/xml",
|
||||
in "Debugger-rmi-trace". The "gradle buildXmlSchema" task will build all of the schema, but individual schema may be
|
||||
built by executing "python build_xml.py" from the python src directory. Each build_xml python file calls the "merge_xml"
|
||||
python file in the rmi store, which uses either the powershell "merge.ps1" (Windows) or direct calls from "lxml" (Linux).
|
||||
Both methods rely on XSLT to transform the base XML (typically agentname_base.xml) by adding new schema from the subpieces
|
||||
or replacing attributes in common schema. There is currently no method for subtracting schema, so the entries in build_xml
|
||||
must be sequential with later entries overriding earlier ones.
|
||||
|
||||
|
||||
@@ -15,4 +15,12 @@ src/main/py/LICENSE||GHIDRA||||END|
|
||||
src/main/py/README.md||GHIDRA||||END|
|
||||
src/main/py/pyproject.toml||GHIDRA||||END|
|
||||
src/main/py/src/ghidratrace/py.typed||GHIDRA||||END|
|
||||
src/main/py/src/ghidratrace/xml/available.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidratrace/xml/breakpointsFlat.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidratrace/xml/breakpointsTiered.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidratrace/xml/common.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidratrace/xml/events.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidratrace/xml/merge.xsl||GHIDRA||||END|
|
||||
src/main/py/src/ghidratrace/xml/nesting_adjustments.xml||GHIDRA||||END|
|
||||
src/main/py/src/ghidratrace/xml/sessions.xml||GHIDRA||||END|
|
||||
src/main/py/tests/EMPTY||GHIDRA||||END|
|
||||
|
||||
@@ -0,0 +1,59 @@
|
||||
## ###
|
||||
# IP: GHIDRA
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
##
|
||||
param (
|
||||
[string]$XmlInput,
|
||||
[string]$RmiDir,
|
||||
[string]$XmlOutput,
|
||||
[string]$XmlUpdates
|
||||
)
|
||||
|
||||
Write-Host "Compositing schema..."
|
||||
$warning = $RmiDir+"warning.xml"
|
||||
$xslFile = $RmiDir+"merge.xsl"
|
||||
$xslt = New-Object System.Xml.Xsl.XslCompiledTransform
|
||||
$settings = New-Object System.Xml.Xsl.XsltSettings($true, $false)
|
||||
$resolver = New-Object System.Xml.XmlUrlResolver
|
||||
$xslt.Load((Resolve-Path $xslFile), $settings, $resolver)
|
||||
|
||||
$workingFile = Join-Path $pwd "current.xml"
|
||||
Copy-Item $XmlInput $workingFile -Force
|
||||
$comment = "<!-- This file was autogenerated using build_xml. DO NOT EDIT.-->`r`n"
|
||||
$content = Get-Content $workingFile -Raw
|
||||
Set-Content $workingFile -Value ($comment + $content) -NoNewLine
|
||||
|
||||
foreach ($fileName in ($XmlUpdates -split " ")) {
|
||||
if (Test-Path $fileName) {
|
||||
$scratch = Join-Path $pwd "temp.xml"
|
||||
|
||||
$xsltArgs = New-Object System.Xml.Xsl.XsltArgumentList
|
||||
$xsltArgs.AddParam("fileName", "", (Resolve-Path $fileName).Path)
|
||||
|
||||
$writer = [System.Xml.XmlWriter]::Create($scratch, $xslt.OutputSettings)
|
||||
try {
|
||||
$xslt.Transform((Resolve-Path $workingFile).Path, $xsltArgs, $writer)
|
||||
$writer.Close()
|
||||
$writer.Dispose()
|
||||
|
||||
Move-Item $scratch $workingFile -Force
|
||||
}
|
||||
catch {
|
||||
$writer.Close()
|
||||
Write-Error "File not found: $fileName"
|
||||
}
|
||||
}
|
||||
}
|
||||
Move-Item $workingFile $XmlOutput -Force
|
||||
Write-Host "Transformation finished"
|
||||
@@ -0,0 +1,64 @@
|
||||
## ###
|
||||
# IP: GHIDRA
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
##
|
||||
import os
|
||||
import inspect
|
||||
from typing import Sequence
|
||||
|
||||
|
||||
def merge(xml_base: str, xml_out: str, xml_updates: Sequence[str]) -> None:
|
||||
frame = inspect.currentframe()
|
||||
if frame is None:
|
||||
raise AssertionError("we're cooked")
|
||||
rmi = os.path.dirname(inspect.getfile(frame))
|
||||
|
||||
warning = "This file was autogenerated using build_xml. DO NOT EDIT."
|
||||
|
||||
# This appears to be necessitated by path issue, i.e. merge.xsl uses "document"
|
||||
# and the Windows version of lxml doesn't do the right thing
|
||||
if os.name == 'nt':
|
||||
import subprocess
|
||||
|
||||
ps_script = rmi+'/merge.ps1'
|
||||
updates = " ".join(xml_updates)
|
||||
command = [
|
||||
"powershell.exe",
|
||||
"-ExecutionPolicy", "Bypass",
|
||||
"-File", ps_script,
|
||||
"-XmlInput", xml_base,
|
||||
"-RmiDir", rmi,
|
||||
"-XmlOutput", xml_out,
|
||||
"-XmlUpdates", updates
|
||||
]
|
||||
try:
|
||||
result = subprocess.run(command, capture_output=True, text=True)
|
||||
print(result.stdout)
|
||||
except subprocess.CalledProcessError as e:
|
||||
print(f"Error: {e.stderror}")
|
||||
else:
|
||||
from lxml import etree
|
||||
|
||||
merge_doc = etree.parse(xml_base)
|
||||
warning_node = etree.Comment(warning)
|
||||
root = merge_doc.getroot()
|
||||
root.insert(0, warning_node)
|
||||
|
||||
xslt_doc = etree.parse(rmi+'/xml/merge.xsl')
|
||||
transform = etree.XSLT(xslt_doc)
|
||||
for xml_update in xml_updates:
|
||||
merge_doc = transform(
|
||||
merge_doc, fileName=etree.XSLT.strparam(xml_update))
|
||||
with open(xml_out, "wb") as f:
|
||||
f.write(merge_doc)
|
||||
@@ -0,0 +1,15 @@
|
||||
<context>
|
||||
<schema name="AvailableContainer" canonical="yes" elementResync="ALWAYS" attributeResync="NEVER">
|
||||
<element schema="Attachable" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Attachable" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID" />
|
||||
<attribute name="PID" schema="LONG" />
|
||||
<attribute-alias from="_pid" to="PID" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
</context>
|
||||
@@ -0,0 +1,31 @@
|
||||
<context>
|
||||
<schema name="BreakpointContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="BreakpointSpec" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="BreakpointSpec" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="BreakpointSpec" />
|
||||
<interface name="BreakpointLocation" />
|
||||
<interface name="Togglable" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Expression" schema="STRING" hidden="yes" />
|
||||
<attribute-alias from="_expression" to="Expression" />
|
||||
<attribute name="Kinds" schema="STRING" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_kinds" to="Kinds" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="Enabled" schema="BOOL" required="yes" />
|
||||
<attribute-alias from="_enabled" to="Enabled" />
|
||||
<attribute name="Commands" schema="STRING" />
|
||||
<attribute name="Condition" schema="STRING" />
|
||||
<attribute name="Hit Count" schema="INT" />
|
||||
<attribute name="Ignore Count" schema="INT" />
|
||||
<attribute name="Pending" schema="BOOL" />
|
||||
<attribute name="Silent" schema="BOOL" />
|
||||
<attribute name="Temporary" schema="BOOL" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
</context>
|
||||
@@ -0,0 +1,44 @@
|
||||
<context>
|
||||
<schema name="BreakpointContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="BreakpointSpec" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="BreakpointSpec" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="BreakpointSpec" />
|
||||
<interface name="Togglable" />
|
||||
<element schema="BreakpointLocation" />
|
||||
<attribute name="Expression" schema="STRING" hidden="yes" />
|
||||
<attribute-alias from="_expression" to="Expression" />
|
||||
<attribute name="Kinds" schema="STRING" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_kinds" to="Kinds" />
|
||||
<attribute name="Enabled" schema="BOOL" required="yes" />
|
||||
<attribute-alias from="_enabled" to="Enabled" />
|
||||
<attribute name="Commands" schema="STRING" />
|
||||
<attribute name="Condition" schema="STRING" />
|
||||
<attribute name="Hit Count" schema="INT" />
|
||||
<attribute name="Ignore Count" schema="INT" />
|
||||
<attribute name="Pending" schema="BOOL" />
|
||||
<attribute name="Silent" schema="BOOL" />
|
||||
<attribute name="Temporary" schema="BOOL" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="BreakpointLocation" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="BreakpointLocation" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute name="Enabled" schema="BOOL" />
|
||||
<attribute-alias from="_enabled" to="Enabled" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="BreakpointLocationContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="BreakpointLocation" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
</context>
|
||||
@@ -0,0 +1,167 @@
|
||||
<context>
|
||||
<schema name="Selectable" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="OBJECT" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="State" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="ProcessContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Process" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Process" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="Process" />
|
||||
<interface name="Aggregate" />
|
||||
<interface name="ExecutionStateful" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Threads" schema="ThreadContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Exit Code" schema="LONG" />
|
||||
<attribute-alias from="_exit_code" to="Exit Code" />
|
||||
<attribute name="Environment" schema="Environment" required="yes" fixed="yes" />
|
||||
<attribute name="Memory" schema="Memory" required="yes" fixed="yes" />
|
||||
<attribute name="Modules" schema="ModuleContainer" required="yes" fixed="yes" />
|
||||
<attribute name="PID" schema="LONG" hidden="yes" />
|
||||
<attribute-alias from="_pid" to="PID" />
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="Environment" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Environment" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="OS" schema="STRING" />
|
||||
<attribute name="Arch" schema="STRING" />
|
||||
<attribute name="Endian" schema="STRING" />
|
||||
<attribute name="Debugger" schema="STRING" />
|
||||
<attribute-alias from="_os" to="OS" />
|
||||
<attribute-alias from="_arch" to="Arch" />
|
||||
<attribute-alias from="_endian" to="Endian" />
|
||||
<attribute-alias from="_debugger" to="Debugger" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="ModuleContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Module" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Memory" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Memory" />
|
||||
<element schema="MemoryRegion" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="ThreadContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Thread" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Thread" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="Thread" />
|
||||
<interface name="ExecutionStateful" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Stack" schema="Stack" required="yes" fixed="yes" />
|
||||
<attribute name="TID" schema="LONG" />
|
||||
<attribute-alias from="_tid" to="TID" />
|
||||
<attribute name="State" schema="EXECUTION_STATE" required="yes" hidden="yes" />
|
||||
<attribute-alias from="_state" to="State" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_short_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="Module" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Module" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Sections" schema="SectionContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Symbols" schema="SymbolContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Name" schema="STRING" />
|
||||
<attribute-alias from="_module_name" to="Name" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="MemoryRegion" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="MemoryRegion" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Offset" schema="STRING" fixed="yes" />
|
||||
<attribute-alias from="_offset" to="Offset" />
|
||||
<attribute name="Object File" schema="STRING" fixed="yes" />
|
||||
<attribute-alias from="_objfile" to="Object File" />
|
||||
<attribute name="Range" schema="RANGE" required="yes" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="_readable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="_writable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="_executable" schema="BOOL" required="yes" hidden="yes" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="SectionContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Section" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Stack" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Stack" />
|
||||
<element schema="StackFrame" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="SymbolContainer" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<element schema="Symbol" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Symbol" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="VOID" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="StackFrame" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="StackFrame" />
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Function" schema="STRING" hidden="yes" />
|
||||
<attribute-alias from="_function" to="Function" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="Section" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Section" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Range" schema="RANGE" />
|
||||
<attribute-alias from="_range" to="Range" />
|
||||
<attribute name="Offset" schema="STRING" fixed="yes" />
|
||||
<attribute-alias from="_offset" to="Offset" />
|
||||
<attribute name="Module" schema="Module" fixed="yes" hidden = "yes" />
|
||||
<attribute-alias from="_module" to="Module" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="RegisterValueContainer" canonical="yes" attributeResync="ONCE">
|
||||
<interface name="RegisterContainer" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
</schema>
|
||||
<schema name="Register">
|
||||
<interface name="Register" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
</context>
|
||||
@@ -0,0 +1,46 @@
|
||||
<context>
|
||||
<schema name="DebugBreakpointContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Events" schema="EventContainer" required="yes" />
|
||||
<attribute name="Exceptions" schema="ExceptionContainer" required="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="EventContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Event" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Event" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="ANY" />
|
||||
<attribute name="Cont" schema="ContinueOption" />
|
||||
<attribute name="Exec" schema="ExecutionOption" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="ExceptionContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Exception" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="Exception" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="ANY" />
|
||||
<attribute name="Cont" schema="ContinueOption" />
|
||||
<attribute name="Exec" schema="ExecutionOption" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="ContinueOption" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Togglable" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="ExecutionOption" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Togglable" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
</context>
|
||||
@@ -0,0 +1,93 @@
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
|
||||
<xsl:output method="xml" indent="yes"/>
|
||||
<xsl:strip-space elements="*"/>
|
||||
|
||||
<xsl:param name="fileName" />
|
||||
<xsl:variable name="updates" select="document($fileName)" />
|
||||
|
||||
|
||||
<xsl:template match="@* | node()">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@* | node()"/>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<!-- 1. Schema Level: Merging Children -->
|
||||
<xsl:template match="schema">
|
||||
<xsl:variable name="schemaName" select="@name"/>
|
||||
<xsl:variable name="updateSchema" select="$updates/context/schema[@name = $schemaName]"/>
|
||||
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@*"/>
|
||||
<!-- Process File 1 children -->
|
||||
<xsl:apply-templates select="node()"/>
|
||||
|
||||
<!-- Add children from File 2 that are completely missing in File 1 -->
|
||||
<xsl:if test="$updateSchema">
|
||||
<xsl:variable name="file1Children" select="*"/>
|
||||
<xsl:for-each select="$updateSchema/*">
|
||||
<xsl:choose>
|
||||
<!-- For nodes with names -->
|
||||
<xsl:when test="@name and not($file1Children[@name = current()/@name])">
|
||||
<xsl:copy-of select="."/>
|
||||
</xsl:when>
|
||||
<!-- For nodes without names (e.g. VOID) match by schema -->
|
||||
<xsl:when test="not(@name) and @schema and not($file1Children[not(@name) and @schema = current()/@schema])">
|
||||
<xsl:copy-of select="."/>
|
||||
</xsl:when>
|
||||
<!-- For nodes without names (e.g. VOID) match by 'from' -->
|
||||
<xsl:when test="not(@name) and @from and not($file1Children[not(@name) and @from = current()/@from])">
|
||||
<xsl:copy-of select="."/>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:for-each>
|
||||
</xsl:if>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
<!-- 2. Overwrite Rule for attributes WITH a name -->
|
||||
<xsl:template match="schema/*[@name]">
|
||||
<xsl:variable name="schemaName" select="../@name"/>
|
||||
<xsl:variable name="childName" select="@name"/>
|
||||
<xsl:variable name="updateNode" select="$updates/context/schema[@name = $schemaName]/*[@name = $childName]"/>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="$updateNode">
|
||||
<xsl:copy-of select="$updateNode"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:copy><xsl:apply-templates select="@* | node()"/></xsl:copy>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- 3. Overwrite Rule for attributes WITHOUT a name (VOID, ANY) -->
|
||||
<xsl:template match="schema/*[not(@name) and @schema]">
|
||||
<xsl:variable name="schemaName" select="../@name"/>
|
||||
<xsl:variable name="schemaType" select="@schema"/>
|
||||
<xsl:variable name="updateNode" select="$updates/context/schema[@name = $schemaName]/*[not(@name) and @schema = $schemaType]"/>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="$updateNode">
|
||||
<xsl:copy-of select="$updateNode"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:copy><xsl:apply-templates select="@* | node()"/></xsl:copy>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- 4. Add completely new schemas -->
|
||||
<xsl:template match="/*">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@* | node()"/>
|
||||
<xsl:variable name="file1Root" select="."/>
|
||||
<xsl:for-each select="$updates/context/schema">
|
||||
<xsl:if test="not($file1Root/schema[@name = current()/@name])">
|
||||
<xsl:copy-of select="."/>
|
||||
</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
<!-- These are adjustment common to the Windows agents -->
|
||||
<context>
|
||||
<schema name="Thread" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Stack" schema="StackFramesContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Registers" schema="RegisterValueContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Environment" schema="ANY" fixed="yes" />
|
||||
<attribute name="Id" schema="STRING" fixed="yes" />
|
||||
<attribute name="Advance" schema="Method" required="yes" fixed="yes" hidden="yes" />
|
||||
</schema>
|
||||
<schema name="Method" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Method" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="_display" schema="STRING" required="yes" fixed="yes" hidden="yes" />
|
||||
<attribute name="_return_type" schema="TYPE" required="yes" fixed="yes" hidden="yes" />
|
||||
<attribute name="_parameters" schema="MAP_PARAMETERS" required="yes" fixed="yes" hidden="yes" />
|
||||
<attribute schema="VOID" fixed="yes" hidden="yes" />
|
||||
</schema>
|
||||
<schema name="StackFramesContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Aggregate" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Frames" schema="Stack" required="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="StackFrame" elementResync="NEVER" attributeResync="NEVER">
|
||||
<attribute name="Instruction Offset" schema="ADDRESS" required="yes" />
|
||||
<attribute-alias from="_pc" to="Instruction Offset" />
|
||||
<attribute name="Stack Offset" schema="ADDRESS" />
|
||||
<attribute name="Return Offset" schema="ADDRESS" />
|
||||
<attribute name="Frame Offset" schema="ADDRESS" />
|
||||
<attribute schema="ANY" />
|
||||
</schema>
|
||||
<schema name="RegisterValueContainer" attributeResync="ONCE">
|
||||
<attribute name="General Purpose Registers" schema="RegisterBank" />
|
||||
<attribute name="Floating Point Registers" schema="RegisterBank" />
|
||||
<attribute name="Advanced Vector Extensions" schema="RegisterBank" />
|
||||
<attribute name="Memory Protection Extensions" schema="RegisterBank" />
|
||||
<attribute name="FloatingPoint" schema="RegisterBank" />
|
||||
<attribute name="SIMD" schema="RegisterBank" />
|
||||
<attribute name="User" schema="RegisterBank" />
|
||||
<attribute schema="VOID" />
|
||||
</schema>
|
||||
<schema name="RegisterBank" canonical="yes" elementResync="ONCE" attributeResync="NEVER">
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="Register" />
|
||||
</schema>
|
||||
</context>
|
||||
@@ -0,0 +1,21 @@
|
||||
<context>
|
||||
<schema name="SessionContainer" canonical="yes" elementResync="NEVER" attributeResync="NEVER">
|
||||
<element schema="Session" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
<schema name="Session" elementResync="NEVER" attributeResync="NEVER">
|
||||
<interface name="Activatable" />
|
||||
<interface name="FocusScope" />
|
||||
<interface name="Aggregate" />
|
||||
<interface name="ExecutionStateful" />
|
||||
<element schema="VOID" />
|
||||
<attribute name="Processes" schema="ProcessContainer" required="yes" fixed="yes" />
|
||||
<attribute name="Available" schema="AvailableContainer" required="yes" fixed="yes" />
|
||||
<attribute name="_event_thread" schema="OBJECT" hidden="yes" />
|
||||
<attribute name="_focus" schema="Selectable" required="yes" hidden="yes" />
|
||||
<attribute name="_display" schema="STRING" hidden="yes" />
|
||||
<attribute name="_order" schema="INT" hidden="yes" />
|
||||
<attribute schema="ANY"/>
|
||||
</schema>
|
||||
</context>
|
||||
@@ -124,3 +124,34 @@ ext.distributePyDep = { name ->
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This task composes debugger schema files from their subpieces
|
||||
|
||||
def foundFiles = fileTree("src/main/py/src").matching {
|
||||
include "**/build_xml.py"
|
||||
}
|
||||
|
||||
task buildXmlSchema {
|
||||
doLast {
|
||||
if (rootProject.PYTHON3 == null) {
|
||||
throw new GradleException("A supported version of Python [${PYTHON_SUPPORTED}] was not found!")
|
||||
}
|
||||
|
||||
File buildScript = foundFiles.isEmpty() ? null : foundFiles.singleFile
|
||||
if (buildScript == null || !buildScript.exists()) {
|
||||
println "Warning: Could not find build_xml.py for ${project.name}"
|
||||
return
|
||||
}
|
||||
|
||||
def exec = providers.exec {
|
||||
workingDir { buildScript.parentFile }
|
||||
ignoreExitValue = true
|
||||
commandLine rootProject.PYTHON3
|
||||
args "build_xml.py"
|
||||
}
|
||||
if (exec.result.get().exitValue != 0) {
|
||||
throw new GradleException(exec.standardError.asText.get().strip())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user