mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-04 10:19:23 +02:00
Many typo's
These were found using the command below searching for duplicated words, and manually going through the results to remove the false positives and reword the true positives. Sometimes I removed the doubled word and sometimes I replaced the duplicated word. The grep command: grep -nIEr '\b([a-zA-Z]+)[[:space:]*]+\1\b' ./Ghidra
This commit is contained in:
parent
b7e91e80a2
commit
8303061629
252 changed files with 312 additions and 314 deletions
|
@ -68,7 +68,7 @@ public interface LocationTrackingSpecFactory extends ExtensionPoint {
|
||||||
List<LocationTrackingSpec> getSuggested(PluginTool tool);
|
List<LocationTrackingSpec> getSuggested(PluginTool tool);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Attempt to parse the given configuration name as as specification
|
* Attempt to parse the given configuration name as a specification
|
||||||
*
|
*
|
||||||
* @param name the configuration name, usually including a prefix unique to each factory
|
* @param name the configuration name, usually including a prefix unique to each factory
|
||||||
* @return the specification, or null if this factory cannot parse it
|
* @return the specification, or null if this factory cannot parse it
|
||||||
|
|
|
@ -558,7 +558,7 @@ public interface LogicalBreakpoint {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the desired state were the the logical breakpoint to be toggled
|
* Get the desired state were the logical breakpoint to be toggled
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* The expected "action" when toggling a breakpoint may vary depending on whether or not the
|
* The expected "action" when toggling a breakpoint may vary depending on whether or not the
|
||||||
|
|
|
@ -134,7 +134,7 @@ I instead just use a fixed 32-bit int now.
|
||||||
|
|
||||||
# How-To?
|
# How-To?
|
||||||
|
|
||||||
For now, I'd say just the the gdb implementation as a template / guide.
|
For now, I'd say just take the gdb implementation as a template / guide.
|
||||||
Just beware, the whole thing is a bit unstable, so the code may change, but still, I don't expect it to change so drastically that integration work would be scrapped.
|
Just beware, the whole thing is a bit unstable, so the code may change, but still, I don't expect it to change so drastically that integration work would be scrapped.
|
||||||
|
|
||||||
If you're writing Python, create a Python package following the template for gdb's.
|
If you're writing Python, create a Python package following the template for gdb's.
|
||||||
|
|
|
@ -376,7 +376,7 @@ class Trace(Generic[E]):
|
||||||
List[str], RemoteResult[Any, List[str]]]:
|
List[str], RemoteResult[Any, List[str]]]:
|
||||||
"""Set register values at the given time on.
|
"""Set register values at the given time on.
|
||||||
|
|
||||||
values is a dictionary, where each key is a a register name, and
|
values is a dictionary, where each key is a register name, and
|
||||||
the value is a byte array. No matter the target architecture,
|
the value is a byte array. No matter the target architecture,
|
||||||
the value is given in big-endian byte order.
|
the value is given in big-endian byte order.
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -289,7 +289,7 @@ public class DebuggerDisassemblyTest extends AbstractGhidraHeadedDebuggerTest {
|
||||||
assertMnemonic("JMP", instructions.getAt(0, tb.addr(0x00400000)));
|
assertMnemonic("JMP", instructions.getAt(0, tb.addr(0x00400000)));
|
||||||
/**
|
/**
|
||||||
* Depending on preference for branch or fall-through, the disassembler may or may not
|
* Depending on preference for branch or fall-through, the disassembler may or may not
|
||||||
* proceed to the following instructions. I don't really care, since the test is the the
|
* proceed to the following instructions. I don't really care, since the test is that the
|
||||||
* JMP gets deleted after the update to PC.
|
* JMP gets deleted after the update to PC.
|
||||||
*/
|
*/
|
||||||
});
|
});
|
||||||
|
@ -324,7 +324,7 @@ public class DebuggerDisassemblyTest extends AbstractGhidraHeadedDebuggerTest {
|
||||||
assertMnemonic("JMP", instructions.getAt(0, tb.addr(0x00400000)));
|
assertMnemonic("JMP", instructions.getAt(0, tb.addr(0x00400000)));
|
||||||
/**
|
/**
|
||||||
* Depending on preference for branch or fall-through, the disassembler may or may not
|
* Depending on preference for branch or fall-through, the disassembler may or may not
|
||||||
* proceed to the following instructions. I don't really care, since the test is the the
|
* proceed to the following instructions. I don't really care, since the test is that the
|
||||||
* JMP gets deleted after the update to PC.
|
* JMP gets deleted after the update to PC.
|
||||||
*/
|
*/
|
||||||
});
|
});
|
||||||
|
@ -374,7 +374,7 @@ public class DebuggerDisassemblyTest extends AbstractGhidraHeadedDebuggerTest {
|
||||||
assertMnemonic("JMP", instructions.getAt(0, tb.addr(0x00400000)));
|
assertMnemonic("JMP", instructions.getAt(0, tb.addr(0x00400000)));
|
||||||
/**
|
/**
|
||||||
* Depending on preference for branch or fall-through, the disassembler may or may not
|
* Depending on preference for branch or fall-through, the disassembler may or may not
|
||||||
* proceed to the following instructions. I don't really care, since the test is the the
|
* proceed to the following instructions. I don't really care, since the test is that the
|
||||||
* JMP gets deleted after the update to PC.
|
* JMP gets deleted after the update to PC.
|
||||||
*/
|
*/
|
||||||
});
|
});
|
||||||
|
|
|
@ -1467,13 +1467,13 @@ public class DBTraceProgramView implements TraceProgramView {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateMemoryAddSpaceBlock(AddressSpace space) {
|
public void updateMemoryAddSpaceBlock(AddressSpace space) {
|
||||||
// Spaces not not time-bound. No visibility check.
|
// Spaces are not time-bound. No visibility check.
|
||||||
memory.updateAddSpaceBlock(space);
|
memory.updateAddSpaceBlock(space);
|
||||||
allAddressesValid = false;
|
allAddressesValid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateMemoryDeleteSpaceBlock(AddressSpace space) {
|
public void updateMemoryDeleteSpaceBlock(AddressSpace space) {
|
||||||
// Spaces not not time-bound. No visibility check.
|
// Spaces are not time-bound. No visibility check.
|
||||||
memory.updateDeleteSpaceBlock(space);
|
memory.updateDeleteSpaceBlock(space);
|
||||||
allAddressesValid = false;
|
allAddressesValid = false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -46,7 +46,7 @@ public class XmlTargetObjectSchemaTest {
|
||||||
<schema name="down1">
|
<schema name="down1">
|
||||||
<attribute schema="VOID" fixed="yes" hidden="yes" />
|
<attribute schema="VOID" fixed="yes" hidden="yes" />
|
||||||
</schema>
|
</schema>
|
||||||
</context>"""; // Cannot have final final new-line or serialize test will fail
|
</context>"""; // Cannot have a final new-line or serialize test will fail
|
||||||
|
|
||||||
protected static final DefaultSchemaContext CTX = new DefaultSchemaContext();
|
protected static final DefaultSchemaContext CTX = new DefaultSchemaContext();
|
||||||
protected static final SchemaName NAME_ROOT = new SchemaName("root");
|
protected static final SchemaName NAME_ROOT = new SchemaName("root");
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
"filename">localhost</CODE> is running both a Ghidra Server and a BSim PostgreSQL database
|
"filename">localhost</CODE> is running both a Ghidra Server and a BSim PostgreSQL database
|
||||||
server. On the Ghidra Server, a repository named <CODE class="filename">repo</CODE> has
|
server. On the Ghidra Server, a repository named <CODE class="filename">repo</CODE> has
|
||||||
been created. On the BSim server, a database named <CODE class="filename">repo</CODE> has
|
been created. On the BSim server, a database named <CODE class="filename">repo</CODE> has
|
||||||
also been created. See See <A class="xref" href=
|
also been created. See <A class="xref" href=
|
||||||
"CommandLineReference.html#BSimCommand">Command-Line Utility Reference</A> for more
|
"CommandLineReference.html#BSimCommand">Command-Line Utility Reference</A> for more
|
||||||
details on use of <STRONG>bsim</STRONG> command and other supported BSim databases.</P>
|
details on use of <STRONG>bsim</STRONG> command and other supported BSim databases.</P>
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ import java.io.IOException;
|
||||||
import java.io.Writer;
|
import java.io.Writer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A user-defined category associated associated with an executable
|
* A user-defined category associated with an executable
|
||||||
* Specified by a -type- and then the particular -category- (within the type) that
|
* Specified by a -type- and then the particular -category- (within the type) that
|
||||||
* the executable belongs to.
|
* the executable belongs to.
|
||||||
*
|
*
|
||||||
|
|
|
@ -113,7 +113,7 @@
|
||||||
|
|
||||||
|
|
||||||
<A name="Show_Xrefs"></A>
|
<A name="Show_Xrefs"></A>
|
||||||
<P>In the XRef field, sometimes there are too many addresses to display so the the field will
|
<P>In the XRef field, sometimes there are too many addresses to display so the field will
|
||||||
display "[more]" to indicate that one or more cross-reference addresses are not shown.</P>
|
display "[more]" to indicate that one or more cross-reference addresses are not shown.</P>
|
||||||
|
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
|
|
|
@ -897,7 +897,7 @@
|
||||||
contains the prefix to use for local labels.</P>
|
contains the prefix to use for local labels.</P>
|
||||||
|
|
||||||
<P><B>Enable Word Wrapping -</B> Option to wrap strings in operand lines that are too long
|
<P><B>Enable Word Wrapping -</B> Option to wrap strings in operand lines that are too long
|
||||||
to fit in the operand field. Note that that word wrapping can only occur where spaces exist
|
to fit in the operand field. Note that word wrapping can only occur where spaces exist
|
||||||
in the string.<BR>
|
in the string.<BR>
|
||||||
</P>
|
</P>
|
||||||
|
|
||||||
|
|
|
@ -421,7 +421,7 @@
|
||||||
must be used to precisely place a bitfield component. Adding a bitfield component via the
|
must be used to precisely place a bitfield component. Adding a bitfield component via the
|
||||||
structure table view via datatype text entry (e.g., char:1) provides only rough placement for non-packed
|
structure table view via datatype text entry (e.g., char:1) provides only rough placement for non-packed
|
||||||
structures since additional bytes will be introduced.
|
structures since additional bytes will be introduced.
|
||||||
The BitField Editor may be displayed using the the Add Bitfield and
|
The BitField Editor may be displayed using the Add Bitfield and
|
||||||
Edit Bitfield popup menu actions on a selected structure component. The datatype text entry approach
|
Edit Bitfield popup menu actions on a selected structure component. The datatype text entry approach
|
||||||
must be used for all unions and packed structures.</li>
|
must be used for all unions and packed structures.</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -1133,7 +1133,7 @@
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>On occasion there may be the need to add stipulate additional attributes on a pointer
|
<P>On occasion there may be the need to add stipulate additional attributes on a pointer
|
||||||
type to stipulate how the associated pointer should be interpreted or processed during analysis.
|
type to stipulate how the associated pointer should be interpreted or processed during analysis.
|
||||||
Such pointer attributes may only be specified when such a pointer in in the form of a Typedef
|
Such pointer attributes may only be specified when such a pointer in the form of a Typedef
|
||||||
which enables the datatype to preserve these attributes during type resolution and propagation.
|
which enables the datatype to preserve these attributes during type resolution and propagation.
|
||||||
This includes preservation of such Typedef Settings within a data type archive, and through
|
This includes preservation of such Typedef Settings within a data type archive, and through
|
||||||
merge processing, which normal Data Settings do not support.</P>
|
merge processing, which normal Data Settings do not support.</P>
|
||||||
|
|
|
@ -142,7 +142,7 @@
|
||||||
</TD>
|
</TD>
|
||||||
|
|
||||||
<TD style="vertical-align: top;">- Indicates the archive has datatypes from a
|
<TD style="vertical-align: top;">- Indicates the archive has datatypes from a
|
||||||
source archive that has been been modified. An update is needed.</TD>
|
source archive that has been modified. An update is needed.</TD>
|
||||||
</TR>
|
</TR>
|
||||||
|
|
||||||
<TR valign="top">
|
<TR valign="top">
|
||||||
|
@ -519,7 +519,7 @@
|
||||||
<H3><A name="Copy"></A>Copy</H3>
|
<H3><A name="Copy"></A>Copy</H3>
|
||||||
|
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>The <I><B>Copy</B></I> action can be be used to
|
<P>The <I><B>Copy</B></I> action can be used to
|
||||||
<A href="data_type_manager_description.htm#CopyDataType">copy
|
<A href="data_type_manager_description.htm#CopyDataType">copy
|
||||||
selected data types</A> and/or
|
selected data types</A> and/or
|
||||||
<A href="data_type_manager_description.htm#CopyCategory">copy selected categories</A>.
|
<A href="data_type_manager_description.htm#CopyCategory">copy selected categories</A>.
|
||||||
|
@ -533,7 +533,7 @@
|
||||||
<H3><A name="Cut"></A>Cut</H3>
|
<H3><A name="Cut"></A>Cut</H3>
|
||||||
|
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>The <I><B>Cut</B></I> action can be be used to
|
<P>The <I><B>Cut</B></I> action can be used to
|
||||||
<A href="data_type_manager_description.htm#MoveDataType">move selected
|
<A href="data_type_manager_description.htm#MoveDataType">move selected
|
||||||
data types</A> and/or
|
data types</A> and/or
|
||||||
<A href="data_type_manager_description.htm#MoveCategory">move selected categories</A>. The
|
<A href="data_type_manager_description.htm#MoveCategory">move selected categories</A>. The
|
||||||
|
|
|
@ -105,10 +105,10 @@
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<UL>
|
<UL>
|
||||||
<LI><B>Format</B> - This field is a drop-down list containing all the valid <A href=
|
<LI><B>Format</B> - This field is a drop-down list containing all the valid <A href=
|
||||||
"#Exporter_Formats">export file formats</A> that could be used to to export the
|
"#Exporter_Formats">export file formats</A> that could be used to export the
|
||||||
program. By default, the last used format will be auto-selected.</LI>
|
program. By default, the last used format will be auto-selected.</LI>
|
||||||
|
|
||||||
<LI><B>Output File</B> - This field specifies the the output file for the export. By
|
<LI><B>Output File</B> - This field specifies the output file for the export. By
|
||||||
default, the output file's name will be the name of the program and the output folder
|
default, the output file's name will be the name of the program and the output folder
|
||||||
will be the user's home folder or the last folder used for an export if an export has
|
will be the user's home folder or the last folder used for an export if an export has
|
||||||
been performed in the current session. Use the "..." button to bring up a file chooser
|
been performed in the current session. Use the "..." button to bring up a file chooser
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
Address</I> field is disabled. If an instruction has no default fallthrough (e.g., "jump"),
|
Address</I> field is disabled. If an instruction has no default fallthrough (e.g., "jump"),
|
||||||
the Fallthrough Address field is empty. Choose the <B>User</B> button to enter a new
|
the Fallthrough Address field is empty. Choose the <B>User</B> button to enter a new
|
||||||
fallthrough address. When the <B>User</B> button is selected, the <I>Fallthrough</I>
|
fallthrough address. When the <B>User</B> button is selected, the <I>Fallthrough</I>
|
||||||
<I>Address</I> field is updated as you move the cursor in the the Code Browser.</P>
|
<I>Address</I> field is updated as you move the cursor in the Code Browser.</P>
|
||||||
|
|
||||||
<P>Select the Home button to navigate the Code Browser back to this address. The home panel
|
<P>Select the Home button to navigate the Code Browser back to this address. The home panel
|
||||||
shows the address and the instruction when you selected the <B>Set</B> option.</P>
|
shows the address and the instruction when you selected the <B>Set</B> option.</P>
|
||||||
|
|
|
@ -108,7 +108,7 @@
|
||||||
<OL>
|
<OL>
|
||||||
<LI>Connect the tools in one direction as described above.</LI>
|
<LI>Connect the tools in one direction as described above.</LI>
|
||||||
|
|
||||||
<LI>Select Tool B as the event producer and and Tool A as the event consumer.</LI>
|
<LI>Select Tool B as the event producer and Tool A as the event consumer.</LI>
|
||||||
|
|
||||||
<LI>Select the check box for the event of interest in the <I>Event Names</I> list.</LI>
|
<LI>Select the check box for the event of interest in the <I>Event Names</I> list.</LI>
|
||||||
</OL>
|
</OL>
|
||||||
|
@ -174,7 +174,7 @@
|
||||||
<OL>
|
<OL>
|
||||||
<LI>Disconnect the tools in one direction as described above.</LI>
|
<LI>Disconnect the tools in one direction as described above.</LI>
|
||||||
|
|
||||||
<LI>Select Tool B as the event producer and and Tool A as the event consumer.</LI>
|
<LI>Select Tool B as the event producer and Tool A as the event consumer.</LI>
|
||||||
|
|
||||||
<LI>Turn off the check box for the event of interest in the <I>Event Names</I> list.</LI>
|
<LI>Turn off the check box for the event of interest in the <I>Event Names</I> list.</LI>
|
||||||
</OL>
|
</OL>
|
||||||
|
|
|
@ -530,7 +530,7 @@
|
||||||
<TD width="40%"><A name="HijackedFile"></A>The private file "Example" exists on your
|
<TD width="40%"><A name="HijackedFile"></A>The private file "Example" exists on your
|
||||||
computer, but another user added "Example" to version control, which
|
computer, but another user added "Example" to version control, which
|
||||||
caused the private file to appear as <I>hijacked</I>, (i.e., the file can be saved "as
|
caused the private file to appear as <I>hijacked</I>, (i.e., the file can be saved "as
|
||||||
is" using "<B>Save As</B>" since you do not have the the file checked out that is on
|
is" using "<B>Save As</B>" since you do not have the file checked out that is on
|
||||||
the Ghidra Server.) Hijacked files may also result from a checkout that was <A href=
|
the Ghidra Server.) Hijacked files may also result from a checkout that was <A href=
|
||||||
"help/topics/VersionControl/project_repository.htm#TerminateCheckout">terminated</A>. The
|
"help/topics/VersionControl/project_repository.htm#TerminateCheckout">terminated</A>. The
|
||||||
<I>shared</I> version of "Example" will not be visible in your project until you
|
<I>shared</I> version of "Example" will not be visible in your project until you
|
||||||
|
|
|
@ -256,7 +256,7 @@
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<UL>
|
<UL>
|
||||||
<LI><B>Format</B> - This field is a drop-down list containing all the valid <A href=
|
<LI><B>Format</B> - This field is a drop-down list containing all the valid <A href=
|
||||||
"#Supported_Formats">file formats</A> that could be used to to import the file.
|
"#Supported_Formats">file formats</A> that could be used to import the file.
|
||||||
Typically, there are two options available. One for the actual format of the file (if
|
Typically, there are two options available. One for the actual format of the file (if
|
||||||
Ghidra could detect it) and other is the <B>Raw Binary</B> format, which is always an
|
Ghidra could detect it) and other is the <B>Raw Binary</B> format, which is always an
|
||||||
option regardless of the actual file format and it will simply import the bytes in the
|
option regardless of the actual file format and it will simply import the bytes in the
|
||||||
|
@ -276,7 +276,7 @@
|
||||||
|
|
||||||
<LI><B>Program Name</B> - This field specifies the name for the newly imported program.
|
<LI><B>Program Name</B> - This field specifies the name for the newly imported program.
|
||||||
By default, it will be the name of the imported file with any format specific extenstion
|
By default, it will be the name of the imported file with any format specific extenstion
|
||||||
removed (e.g., .xml, .gzf). Path information at the beginning of the this field
|
removed (e.g., .xml, .gzf). Path information at the beginning of this field
|
||||||
will be used to create a destination folder in the current project under the root folder
|
will be used to create a destination folder in the current project under the root folder
|
||||||
specified by the <B>Destination Folder</B> field.</LI><BR>
|
specified by the <B>Destination Folder</B> field.</LI><BR>
|
||||||
|
|
||||||
|
@ -714,7 +714,7 @@
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>The Library Search Path dialog is used to specify the directories, container files,
|
<P>The Library Search Path dialog is used to specify the directories, container files,
|
||||||
and/or FSRLs that Ghidra should use to resolve external libraries (e.g.; *.dll, *.so) while
|
and/or FSRLs that Ghidra should use to resolve external libraries (e.g.; *.dll, *.so) while
|
||||||
importing. A "." can be added to specify the the program's import location. FSRLs can be
|
importing. A "." can be added to specify the program's import location. FSRLs can be
|
||||||
added via the
|
added via the
|
||||||
<A href="help/topics/FileSystemBrowserPlugin/FileSystemBrowserPlugin.html#FSB_Add_Library_Search_Path">File System Browser context menu</A>.
|
<A href="help/topics/FileSystemBrowserPlugin/FileSystemBrowserPlugin.html#FSB_Add_Library_Search_Path">File System Browser context menu</A>.
|
||||||
</P>
|
</P>
|
||||||
|
|
|
@ -56,7 +56,7 @@ data tree, and setlect <span style="font-weight: bold;">Set Language...</span>
|
||||||
from the popup menu. Since setting the language is such a major
|
from the popup menu. Since setting the language is such a major
|
||||||
change, the following warning will appear.</p>
|
change, the following warning will appear.</p>
|
||||||
<p align="center"><img alt="" src="images/Warning.png"></p>
|
<p align="center"><img alt="" src="images/Warning.png"></p>
|
||||||
<p align="left">Alternatively, if your file is versioned, you you
|
<p align="left">Alternatively, if your file is versioned, you
|
||||||
should check-in any recent changes prior to performing this
|
should check-in any recent changes prior to performing this
|
||||||
operation. If you press the "OK" button, the Select Language
|
operation. If you press the "OK" button, the Select Language
|
||||||
dialog will be displayed:</p>
|
dialog will be displayed:</p>
|
||||||
|
|
|
@ -953,7 +953,7 @@
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
<P><B><A name="Start_Symbols"></A>Start Symbols</B> - A comma separated list of symbol
|
<P><B><A name="Start_Symbols"></A>Start Symbols</B> - A comma separated list of symbol
|
||||||
names to be be used as the starting location for the program if the "Preferred Symbol Name"
|
names to be used as the starting location for the program if the "Preferred Symbol Name"
|
||||||
option is selected above. The first matching symbol found will be used as the starting
|
option is selected above. The first matching symbol found will be used as the starting
|
||||||
location for newly opened programs.</P>
|
location for newly opened programs.</P>
|
||||||
|
|
||||||
|
|
|
@ -844,7 +844,7 @@ c<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
<P>When adding a <I>Stack</I> or <I>Register</I> reference, a corresponding parameter or
|
<P>When adding a <I>Stack</I> or <I>Register</I> reference, a corresponding parameter or
|
||||||
variable may be created. If a local variable is created, the first-use-offset of the
|
variable may be created. If a local variable is created, the first-use-offset of the
|
||||||
variable will correspond to the source instruction location. For this reason, it is
|
variable will correspond to the source instruction location. For this reason, it is
|
||||||
recommended that the first reference to a variable be created on the the first "assignment"
|
recommended that the first reference to a variable be created on the first "assignment"
|
||||||
instruction. If a newly created variable is unwanted, it may be deleted by clicking on it
|
instruction. If a newly created variable is unwanted, it may be deleted by clicking on it
|
||||||
within the Listing and hitting the "<I>Delete</I>" key. Keep in mind that when a variable
|
within the Listing and hitting the "<I>Delete</I>" key. Keep in mind that when a variable
|
||||||
is deleted, any explicit bindings to that variable will be cleared.<BR>
|
is deleted, any explicit bindings to that variable will be cleared.<BR>
|
||||||
|
@ -1085,7 +1085,7 @@ c<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
<P>When adding a <I>Stack</I> or <I>Register</I> reference, a corresponding parameter or
|
<P>When adding a <I>Stack</I> or <I>Register</I> reference, a corresponding parameter or
|
||||||
variable may be created. If a local variable is created, the first-use-offset of the
|
variable may be created. If a local variable is created, the first-use-offset of the
|
||||||
variable will correspond to the source instruction location. For this reason, it is
|
variable will correspond to the source instruction location. For this reason, it is
|
||||||
recommended that the first reference to a variable be created on the the first "assignment"
|
recommended that the first reference to a variable be created on the first "assignment"
|
||||||
instruction. If a newly created variable is unwanted, it may be deleted by clicking on it
|
instruction. If a newly created variable is unwanted, it may be deleted by clicking on it
|
||||||
within the Listing and hitting the "<I>Delete</I>" key. Keep in mind that when a variable
|
within the Listing and hitting the "<I>Delete</I>" key. Keep in mind that when a variable
|
||||||
is deleted, any explicit bindings to that variable will be cleared.<BR>
|
is deleted, any explicit bindings to that variable will be cleared.<BR>
|
||||||
|
|
|
@ -275,7 +275,7 @@
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>Press the <IMG alt="" src="icon.base.plugin.quickfix.done"> toolbar button or use the
|
<P>Press the <IMG alt="" src="icon.base.plugin.quickfix.done"> toolbar button or use the
|
||||||
popup action <B>Execute Selected Action(s)</B> to apply just the selected entries in
|
popup action <B>Execute Selected Action(s)</B> to apply just the selected entries in
|
||||||
the table. If only one item is selected when this this is done, the selected item will
|
the table. If only one item is selected when this is done, the selected item will
|
||||||
move to the next item in the table to facilitate a one at a time workflow.</P>
|
move to the next item in the table to facilitate a one at a time workflow.</P>
|
||||||
</BLOCKQUOTE>
|
</BLOCKQUOTE>
|
||||||
|
|
||||||
|
|
|
@ -338,7 +338,7 @@
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>This action searches forward in memory, starting at the address just after the current
|
<P>This action searches forward in memory, starting at the address just after the current
|
||||||
cursor location. It will continue until a match is found or the highest address in the
|
cursor location. It will continue until a match is found or the highest address in the
|
||||||
search space is reached. It does not "wrap". If a match is found, it it is added to the
|
search space is reached. It does not "wrap". If a match is found, it is added to the
|
||||||
current table of results.</P>
|
current table of results.</P>
|
||||||
</BLOCKQUOTE><A name="Search_Previous"></A>
|
</BLOCKQUOTE><A name="Search_Previous"></A>
|
||||||
|
|
||||||
|
@ -347,7 +347,7 @@
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>This action searches backwards in memory, starting at the address just before the
|
<P>This action searches backwards in memory, starting at the address just before the
|
||||||
current cursor location. It will continue until a match is found or the lowest address in
|
current cursor location. It will continue until a match is found or the lowest address in
|
||||||
the search space is reached. It does not "wrap". If a match is found, it it is added to
|
the search space is reached. It does not "wrap". If a match is found, it is added to
|
||||||
the current table of results.</P>
|
the current table of results.</P>
|
||||||
</BLOCKQUOTE><A name="Refresh_Values"></A>
|
</BLOCKQUOTE><A name="Refresh_Values"></A>
|
||||||
|
|
||||||
|
|
|
@ -117,7 +117,7 @@
|
||||||
<LI>Select the <B>Make Table</B> button.</LI>
|
<LI>Select the <B>Make Table</B> button.</LI>
|
||||||
|
|
||||||
<LI>An address table gets created at the location you chose, containing defined addresses
|
<LI>An address table gets created at the location you chose, containing defined addresses
|
||||||
which now point to to the address created. These addresses now contain XREFs to the table
|
which now point to the address created. These addresses now contain XREFs to the table
|
||||||
entries. If an index to the table exists immediately after the table, it will get created
|
entries. If an index to the table exists immediately after the table, it will get created
|
||||||
as an array of bytes, as well.</LI>
|
as an array of bytes, as well.</LI>
|
||||||
</OL>
|
</OL>
|
||||||
|
|
|
@ -20,7 +20,7 @@
|
||||||
various parts of the listing such as comments, labels, mnemonics, and operands. The
|
various parts of the listing such as comments, labels, mnemonics, and operands. The
|
||||||
<I><A href="SearchAndReplace.htm">Search and Replace</A></I> features allows for globally
|
<I><A href="SearchAndReplace.htm">Search and Replace</A></I> features allows for globally
|
||||||
searching and replacing names or comments on many different types of program elements such as
|
searching and replacing names or comments on many different types of program elements such as
|
||||||
Labels, Functions, Datatypes, Enum Values, and and many others. The
|
Labels, Functions, Datatypes, Enum Values, and many others. The
|
||||||
<I><A href="Search_for_Strings.htm">Search For Strings</A></I> feature
|
<I><A href="Search_for_Strings.htm">Search For Strings</A></I> feature
|
||||||
automatically finds potential ascii strings within the program memory.</P>
|
automatically finds potential ascii strings within the program memory.</P>
|
||||||
|
|
||||||
|
|
|
@ -331,7 +331,7 @@
|
||||||
<H3><A name="Go_To_External_Location"></A>Navigating to External Locations</H3>
|
<H3><A name="Go_To_External_Location"></A>Navigating to External Locations</H3>
|
||||||
|
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>If you select an external symbol (under the <I>Externals</I> folder in the the symbol
|
<P>If you select an external symbol (under the <I>Externals</I> folder in the symbol
|
||||||
tree), you will navigate to an external <I>reference</I> <I>source</I> which has a
|
tree), you will navigate to an external <I>reference</I> <I>source</I> which has a
|
||||||
<I>destination</I> corresponding to the external symbol (i.e., where it is being called
|
<I>destination</I> corresponding to the external symbol (i.e., where it is being called
|
||||||
from). To actually <B>go to</B> the external location, right mouse click on the external
|
from). To actually <B>go to</B> the external location, right mouse click on the external
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
<H3><A name="PluginDialog"></A>Configure Plugins Dialog</H3>
|
<H3><A name="PluginDialog"></A>Configure Plugins Dialog</H3>
|
||||||
|
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>Selecting the <I>Configure</I> link for a package will bring up the the <I>Configure
|
<P>Selecting the <I>Configure</I> link for a package will bring up the <I>Configure
|
||||||
Plugins Dialog</I>.</P>
|
Plugins Dialog</I>.</P>
|
||||||
</BLOCKQUOTE>
|
</BLOCKQUOTE>
|
||||||
|
|
||||||
|
|
|
@ -135,7 +135,7 @@
|
||||||
|
|
||||||
<P><IMG alt="" src="help/shared/note.png" border="0"> A normal checkout is indicated by a
|
<P><IMG alt="" src="help/shared/note.png" border="0"> A normal checkout is indicated by a
|
||||||
checkmark with a green background<IMG alt="" src="images/check.png" border="0">, while an
|
checkmark with a green background<IMG alt="" src="images/check.png" border="0">, while an
|
||||||
exclusive checkout is is indicated by checkmark with a blue background<IMG alt="" src=
|
exclusive checkout is indicated by checkmark with a blue background<IMG alt="" src=
|
||||||
"images/checkex.png" border="0">. A checkmark with a red background<IMG alt="" src=
|
"images/checkex.png" border="0">. A checkmark with a red background<IMG alt="" src=
|
||||||
"images/checkNotLatest.gif" border="0"> indicates that a newer version has been checked-in
|
"images/checkNotLatest.gif" border="0"> indicates that a newer version has been checked-in
|
||||||
by another user.</P>
|
by another user.</P>
|
||||||
|
@ -150,7 +150,7 @@
|
||||||
"0"> </H3>
|
"0"> </H3>
|
||||||
|
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>To check out a file, select the file in the Ghidra Project Window. You can either either
|
<P>To check out a file, select the file in the Ghidra Project Window. You can either
|
||||||
click on the check out icon <IMG alt="" src="images/vcCheckOut.png" border="0"> on the tool
|
click on the check out icon <IMG alt="" src="images/vcCheckOut.png" border="0"> on the tool
|
||||||
bar, or right mouse click on the file and choose the <B>Check Out...</B>
|
bar, or right mouse click on the file and choose the <B>Check Out...</B>
|
||||||
option. </P>
|
option. </P>
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
<li>Has Encoding Error - boolean flag that indicates the string had byte(s) that could not be converted by the character set.
|
<li>Has Encoding Error - boolean flag that indicates the string had byte(s) that could not be converted by the character set.
|
||||||
This is usually caused by having the wrong character set or if the string isn't really a string.</li>
|
This is usually caused by having the wrong character set or if the string isn't really a string.</li>
|
||||||
<li>Charset - name of the character set that this string is encoded in.</li>
|
<li>Charset - name of the character set that this string is encoded in.</li>
|
||||||
<li>Unicode Script - a list of the the scripts (alphabets) used in the string.</li>
|
<li>Unicode Script - a list of the scripts (alphabets) used in the string.</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>The <b>Is Ascii</b>, <b>Has Encoding Error</b>, <b>Unicode Script</b>, and <b>Charset</b> columns are not visible by default. To display
|
<p>The <b>Is Ascii</b>, <b>Has Encoding Error</b>, <b>Unicode Script</b>, and <b>Charset</b> columns are not visible by default. To display
|
||||||
them in the table, right click on the column header row and select
|
them in the table, right click on the column header row and select
|
||||||
|
|
|
@ -35,7 +35,7 @@ public abstract class AbstractCreateStructureCmd implements Command<Program> {
|
||||||
private Address structureAddress;
|
private Address structureAddress;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes the this class to create a structure with the given name
|
* Initializes this class to create a structure with the given name
|
||||||
* and address when the {@link #applyTo(Program)} is called.
|
* and address when the {@link #applyTo(Program)} is called.
|
||||||
*
|
*
|
||||||
* @param name The name of the structure to create.
|
* @param name The name of the structure to create.
|
||||||
|
|
|
@ -693,7 +693,7 @@ abstract class AbstractFunctionMerger implements ListingMergeConstants {
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: Parameter level merging gets really complex when the presence of auto-params are inconsistent
|
// NOTE: Parameter level merging gets really complex when the presence of auto-params are inconsistent
|
||||||
// between between two functions treat as a signature difference when this occurs
|
// between two functions. Treat this as a signature difference when this occurs.
|
||||||
|
|
||||||
for (int i = 0; i < f1Parms.length; i++) {
|
for (int i = 0; i < f1Parms.length; i++) {
|
||||||
if (f1Parms[i].isAutoParameter() != f2Parms[i].isAutoParameter() ||
|
if (f1Parms[i].isAutoParameter() != f2Parms[i].isAutoParameter() ||
|
||||||
|
|
|
@ -140,7 +140,7 @@ public class VariousChoicesPanel extends ConflictPanel {
|
||||||
* Adds a row to the table that doesn't provide any choices.
|
* Adds a row to the table that doesn't provide any choices.
|
||||||
* Instead this row just provides information.
|
* Instead this row just provides information.
|
||||||
*
|
*
|
||||||
* @param title title the is placed at the beginning of the row
|
* @param title title that is placed at the beginning of the row
|
||||||
* @param info the text for each table column in the row
|
* @param info the text for each table column in the row
|
||||||
* @param underline true indicates each info string should be underlined
|
* @param underline true indicates each info string should be underlined
|
||||||
* when it appears. (Underlining is done on the header row (row 0) of the table.
|
* when it appears. (Underlining is done on the header row (row 0) of the table.
|
||||||
|
@ -170,7 +170,7 @@ public class VariousChoicesPanel extends ConflictPanel {
|
||||||
* Adds radiobutton choices as a row of the table.
|
* Adds radiobutton choices as a row of the table.
|
||||||
* Radiobuttons allow you to select only one choice in the row.
|
* Radiobuttons allow you to select only one choice in the row.
|
||||||
*
|
*
|
||||||
* @param title title the is placed at the beginning of the row
|
* @param title title that is placed at the beginning of the row
|
||||||
* @param choices the text for each choice in the row
|
* @param choices the text for each choice in the row
|
||||||
* @param listener listener that gets notified whenever the state of
|
* @param listener listener that gets notified whenever the state of
|
||||||
* one of the radiobuttons in this row changes.
|
* one of the radiobuttons in this row changes.
|
||||||
|
@ -222,7 +222,7 @@ public class VariousChoicesPanel extends ConflictPanel {
|
||||||
* Adds checkbox choices as a row of the table.
|
* Adds checkbox choices as a row of the table.
|
||||||
* Check boxes allow you to select one or more choices in the row.
|
* Check boxes allow you to select one or more choices in the row.
|
||||||
*
|
*
|
||||||
* @param title title the is placed at the beginning of the row
|
* @param title title that is placed at the beginning of the row
|
||||||
* @param choices the text for each choice in the row
|
* @param choices the text for each choice in the row
|
||||||
* @param listener listener that gets notified whenever the state of
|
* @param listener listener that gets notified whenever the state of
|
||||||
* one of the checkboxes in this row changes.
|
* one of the checkboxes in this row changes.
|
||||||
|
|
|
@ -79,7 +79,7 @@ public class ProgramTreeMergeManager implements MergeResolver {
|
||||||
* @param myProgram source of changes to apply to the destination
|
* @param myProgram source of changes to apply to the destination
|
||||||
* program
|
* program
|
||||||
* @param originalProgram program that was originally checked out
|
* @param originalProgram program that was originally checked out
|
||||||
* @param latestProgram program that that is the latest version; the
|
* @param latestProgram program that is the latest version; the
|
||||||
* resultProgram and latestProgram start out as being identical
|
* resultProgram and latestProgram start out as being identical
|
||||||
* @param latestChangeSet change set of the destination program
|
* @param latestChangeSet change set of the destination program
|
||||||
* @param myChangeSet change set for the source program
|
* @param myChangeSet change set for the source program
|
||||||
|
|
|
@ -126,7 +126,7 @@ public class ConstantPropagationAnalyzer extends AbstractAnalyzer {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called to to register a more specific analyzer.
|
* Called to register a more specific analyzer.
|
||||||
*
|
*
|
||||||
* @param processorName
|
* @param processorName
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1107,7 +1107,7 @@ public class OperandReferenceAnalyzer extends AbstractAnalyzer {
|
||||||
/**
|
/**
|
||||||
* Returns the length of the Unicode string found at address.
|
* Returns the length of the Unicode string found at address.
|
||||||
*
|
*
|
||||||
* @return length of string in in words (two byte unicode characters).
|
* @return length of string in words (two byte unicode characters).
|
||||||
*/
|
*/
|
||||||
private int checkUnicodeString(Memory mem, Address adref) {
|
private int checkUnicodeString(Memory mem, Address adref) {
|
||||||
int len = getWStrLen(mem, adref); // returns -1 for bad
|
int len = getWStrLen(mem, adref); // returns -1 for bad
|
||||||
|
|
|
@ -109,8 +109,8 @@ class RegisterContextBuilder {
|
||||||
* @param instr first instruction of range
|
* @param instr first instruction of range
|
||||||
* @param valueFrom point from which existing register value should
|
* @param valueFrom point from which existing register value should
|
||||||
* be read from program context.
|
* be read from program context.
|
||||||
* @param overwrite this method will take not action and return false if
|
* @param overwrite this method will take no action and return false if
|
||||||
* this parameter is false and and a context value has previously been set,
|
* this parameter is false and a context value has previously been set,
|
||||||
* otherwise an attempt will be made to overwrite the current value state.
|
* otherwise an attempt will be made to overwrite the current value state.
|
||||||
* @return true if value was set, otherwise false.
|
* @return true if value was set, otherwise false.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -891,7 +891,7 @@ class RustType implements SymbolNode {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses and represents a a rust symbol const node
|
* Parses and represents a rust symbol const node
|
||||||
*/
|
*/
|
||||||
class RustConst implements SymbolNode {
|
class RustConst implements SymbolNode {
|
||||||
String name;
|
String name;
|
||||||
|
|
|
@ -119,7 +119,7 @@ public abstract class CallNode extends GTreeSlowLoadingNode {
|
||||||
Function function = nodeToAdd.getRemoteFunction();
|
Function function = nodeToAdd.getRemoteFunction();
|
||||||
List<GTreeNode> nodes = nodesByFunction.get(function);
|
List<GTreeNode> nodes = nodesByFunction.get(function);
|
||||||
if (nodes.isEmpty()) {
|
if (nodes.isEmpty()) {
|
||||||
nodes.add(nodeToAdd); // can can always add new nodes when the list is empty
|
nodes.add(nodeToAdd); // we can always add new nodes when the list is empty
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,7 @@ import ghidra.util.ColorUtils;
|
||||||
/**
|
/**
|
||||||
* Class for blending two {@link ListingBackgroundColorModel}s. If neither model has a color
|
* Class for blending two {@link ListingBackgroundColorModel}s. If neither model has a color
|
||||||
* different from its default, then the primary's color is returned. If only one model
|
* different from its default, then the primary's color is returned. If only one model
|
||||||
* has a color different from its default, that that color is returned. If they both have
|
* has a color different from its default, then that color is returned. If they both have
|
||||||
* colors different, the color returned is a blend of the two colors.
|
* colors different, the color returned is a blend of the two colors.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ public class ProgramLocator {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link DomainFile} based based ProgramLocator for the current version of a Program.
|
* Creates a {@link DomainFile}-based ProgramLocator for the current version of a Program.
|
||||||
* @param domainFile the DomainFile for a program
|
* @param domainFile the DomainFile for a program
|
||||||
*/
|
*/
|
||||||
public ProgramLocator(DomainFile domainFile) {
|
public ProgramLocator(DomainFile domainFile) {
|
||||||
|
@ -64,7 +64,7 @@ public class ProgramLocator {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a {@link DomainFile} based based ProgramLocator for a specific Program version.
|
* Creates a {@link DomainFile}-based ProgramLocator for a specific Program version.
|
||||||
* @param domainFile the DomainFile for a program
|
* @param domainFile the DomainFile for a program
|
||||||
* @param version the specific version of the program
|
* @param version the specific version of the program
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,14 +39,14 @@ import ghidra.util.UserSearchUtils;
|
||||||
import ghidra.util.task.TaskMonitor;
|
import ghidra.util.task.TaskMonitor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class attempts to search for text as it is rendered on the screen. This in in
|
* This class attempts to search for text as it is rendered on the screen. This is in
|
||||||
* contrast to the Program Database Searcher which searches the database. This is
|
* contrast to the Program Database Searcher which searches the database. This is
|
||||||
* needed because some information on the screen is rendered "on the fly" and not
|
* needed because some information on the screen is rendered "on the fly" and not
|
||||||
* stored in the database. This searcher is much slower, but delivers
|
* stored in the database. This searcher is much slower, but delivers
|
||||||
* results that are in-line with what the user sees.
|
* results that are in-line with what the user sees.
|
||||||
* <p>
|
* <p>
|
||||||
* The search is performed in two steps. First it uses Instruction and Data iterators to
|
* The search is performed in two steps. First it uses Instruction and Data iterators to
|
||||||
* find possible addresses where where information would be rendered. Then for each of those
|
* find possible addresses where information would be rendered. Then for each of those
|
||||||
* addresses, it uses the code browsers rendering engine to produce a textual representation
|
* addresses, it uses the code browsers rendering engine to produce a textual representation
|
||||||
* for that address. The textual representation also maintains information about the field
|
* for that address. The textual representation also maintains information about the field
|
||||||
* that generated it so that the search can be constrained to specific fields such as the
|
* that generated it so that the search can be constrained to specific fields such as the
|
||||||
|
|
|
@ -171,7 +171,7 @@ public class ClassCategoryNode extends SymbolCategoryNode {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// start with the the top-level class node and walk the namespace path to find the
|
// start with the top-level class node and walk the namespace path to find the
|
||||||
// parent for the given symbol
|
// parent for the given symbol
|
||||||
GTreeNode classNode = entry.getKey();
|
GTreeNode classNode = entry.getKey();
|
||||||
List<Namespace> parentPath = entry.getValue();
|
List<Namespace> parentPath = entry.getValue();
|
||||||
|
@ -205,7 +205,7 @@ public class ClassCategoryNode extends SymbolCategoryNode {
|
||||||
Set<Entry<GTreeNode, List<Namespace>>> entries = classNodes.entrySet();
|
Set<Entry<GTreeNode, List<Namespace>>> entries = classNodes.entrySet();
|
||||||
for (Entry<GTreeNode, List<Namespace>> entry : entries) {
|
for (Entry<GTreeNode, List<Namespace>> entry : entries) {
|
||||||
|
|
||||||
// start with the the top-level class node and walk the namespace path to find the
|
// start with the top-level class node and walk the namespace path to find the
|
||||||
// parent for the given symbol
|
// parent for the given symbol
|
||||||
GTreeNode classNode = entry.getKey();
|
GTreeNode classNode = entry.getKey();
|
||||||
List<Namespace> parentPath = entry.getValue();
|
List<Namespace> parentPath = entry.getValue();
|
||||||
|
@ -237,7 +237,7 @@ public class ClassCategoryNode extends SymbolCategoryNode {
|
||||||
|
|
||||||
|
|
||||||
In this tree, the Label2 symbol is in the tree twice. The mapping created by this method
|
In this tree, the Label2 symbol is in the tree twice. The mapping created by this method
|
||||||
will have have as keys both Class1 and Class2. Class1 will be mapped to Class1/BarNs/Class2
|
will have as keys both Class1 and Class2. Class1 will be mapped to Class1/BarNs/Class2
|
||||||
and Class2 will be mapped to Class2 (since it only has one namespace element).
|
and Class2 will be mapped to Class2 (since it only has one namespace element).
|
||||||
|
|
||||||
This code is needed because this Classes category node will duplicate class nodes. It puts
|
This code is needed because this Classes category node will duplicate class nodes. It puts
|
||||||
|
|
|
@ -119,7 +119,7 @@ class RuntimeInfoProvider extends ReusableDialogComponentProvider {
|
||||||
/**
|
/**
|
||||||
* Adds an "application layout" panel to the tabbed pane.
|
* Adds an "application layout" panel to the tabbed pane.
|
||||||
* <p>
|
* <p>
|
||||||
* The goal of this panel is to display information information about the application such as
|
* The goal of this panel is to display information about the application such as
|
||||||
* what directories it is using on disk, what its PID is, etc.
|
* what directories it is using on disk, what its PID is, etc.
|
||||||
*/
|
*/
|
||||||
private void addApplicationLayout() {
|
private void addApplicationLayout() {
|
||||||
|
|
|
@ -800,7 +800,7 @@ public abstract class GhidraScript extends FlatProgramAPI {
|
||||||
* <p>
|
* <p>
|
||||||
* The script being run uses the given {@link GhidraState} (e.g., script variables)
|
* The script being run uses the given {@link GhidraState} (e.g., script variables)
|
||||||
* Any changes to the state by the script being run will be reflected in the given state
|
* Any changes to the state by the script being run will be reflected in the given state
|
||||||
* object. If the given object is the current state, the this scripts state may be changed
|
* object. If the given object is the current state, this scripts state may be changed
|
||||||
* by the called script.
|
* by the called script.
|
||||||
*
|
*
|
||||||
* @param scriptName the name of the script to run
|
* @param scriptName the name of the script to run
|
||||||
|
@ -822,7 +822,7 @@ public abstract class GhidraScript extends FlatProgramAPI {
|
||||||
* <p>
|
* <p>
|
||||||
* The script being run uses the given {@link GhidraState} (e.g., script variables)
|
* The script being run uses the given {@link GhidraState} (e.g., script variables)
|
||||||
* Any changes to the state by the script being run will be reflected in the given state
|
* Any changes to the state by the script being run will be reflected in the given state
|
||||||
* object. If the given object is the current state, the this scripts state may be changed
|
* object. If the given object is the current state, this scripts state may be changed
|
||||||
* by the called script.
|
* by the called script.
|
||||||
*
|
*
|
||||||
* @param scriptName the name of the script to run
|
* @param scriptName the name of the script to run
|
||||||
|
|
|
@ -45,7 +45,7 @@ public interface MarkerSet extends Comparable<MarkerSet> {
|
||||||
public void add(AddressRange range);
|
public void add(AddressRange range);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the AddressSetCollection to be used for this this marker set.
|
* Sets the AddressSetCollection to be used for this marker set.
|
||||||
*
|
*
|
||||||
* <p><strong>Warning!</strong>
|
* <p><strong>Warning!</strong>
|
||||||
* Using this method will cause this MarkerSet to directly use the given AddressSetCollection.
|
* Using this method will cause this MarkerSet to directly use the given AddressSetCollection.
|
||||||
|
|
|
@ -62,7 +62,7 @@ public interface VSCodeIntegrationService {
|
||||||
public void createVSCodeModuleProject(File projectDir) throws IOException;
|
public void createVSCodeModuleProject(File projectDir) throws IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the given project directory to the the given Visual Studio Code workspace file
|
* Adds the given project directory to the given Visual Studio Code workspace file
|
||||||
* A new workspace will be created if it doesn't already exist
|
* A new workspace will be created if it doesn't already exist
|
||||||
*
|
*
|
||||||
* @param workspaceFile The location of the workspace file
|
* @param workspaceFile The location of the workspace file
|
||||||
|
|
|
@ -451,7 +451,7 @@ public class AddressInput extends JPanel implements FocusableEditor {
|
||||||
}
|
}
|
||||||
|
|
||||||
private String removeLeadingZeros(String addressString) {
|
private String removeLeadingZeros(String addressString) {
|
||||||
// if it has a colon, then is is a segmented address, don't mess with it.
|
// if it has a colon, then it is a segmented address, don't mess with it.
|
||||||
if (addressString.indexOf(":") >= 0) {
|
if (addressString.indexOf(":") >= 0) {
|
||||||
return addressString;
|
return addressString;
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class CoffArchiveMemberHeader implements StructConverter {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Reads a COFF archive member header from the specified {@link BinaryReader reader},
|
* Reads a COFF archive member header from the specified {@link BinaryReader reader},
|
||||||
* leaving the file position at the start of the this member's payload.
|
* leaving the file position at the start of this member's payload.
|
||||||
* <p>
|
* <p>
|
||||||
* The archive member's name is fixed up using the specified {@link LongNamesMember longNames}
|
* The archive member's name is fixed up using the specified {@link LongNamesMember longNames}
|
||||||
* object.
|
* object.
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class DWARFLocationListHeader extends DWARFIndirectTableHeader {
|
||||||
// address_size : 1 byte
|
// address_size : 1 byte
|
||||||
// segment_selector_size : 1 byte
|
// segment_selector_size : 1 byte
|
||||||
// offset entry count: 4 bytes
|
// offset entry count: 4 bytes
|
||||||
// offsets : array of elements are are dwarf_format_int sized
|
// offsets : array of elements that are dwarf_format_int sized
|
||||||
|
|
||||||
long startOffset = reader.getPointerIndex();
|
long startOffset = reader.getPointerIndex();
|
||||||
DWARFLengthValue lengthInfo = DWARFLengthValue.read(reader, defaultIntSize);
|
DWARFLengthValue lengthInfo = DWARFLengthValue.read(reader, defaultIntSize);
|
||||||
|
|
|
@ -33,7 +33,7 @@ public class DWARFRangeListHeader extends DWARFIndirectTableHeader {
|
||||||
// address_size : 1 byte
|
// address_size : 1 byte
|
||||||
// segment_selector_size : 1 byte
|
// segment_selector_size : 1 byte
|
||||||
// offset entry count: 4 bytes
|
// offset entry count: 4 bytes
|
||||||
// offsets : array of elements are are dwarf_format_int sized
|
// offsets : array of elements that are dwarf_format_int sized
|
||||||
|
|
||||||
long startOffset = reader.getPointerIndex();
|
long startOffset = reader.getPointerIndex();
|
||||||
DWARFLengthValue lengthInfo = DWARFLengthValue.read(reader, defaultIntSize);
|
DWARFLengthValue lengthInfo = DWARFLengthValue.read(reader, defaultIntSize);
|
||||||
|
|
|
@ -45,7 +45,7 @@ public class DWARFStringOffsetTableHeader extends DWARFIndirectTableHeader {
|
||||||
// length : dwarf_length
|
// length : dwarf_length
|
||||||
// version : 2 bytes
|
// version : 2 bytes
|
||||||
// padding : 2 bytes
|
// padding : 2 bytes
|
||||||
// offsets : array of elements are are dwarf_format_int sized
|
// offsets : array of elements that are dwarf_format_int sized
|
||||||
|
|
||||||
long startOffset = reader.getPointerIndex();
|
long startOffset = reader.getPointerIndex();
|
||||||
DWARFLengthValue lengthInfo = DWARFLengthValue.read(reader, defaultIntSize);
|
DWARFLengthValue lengthInfo = DWARFLengthValue.read(reader, defaultIntSize);
|
||||||
|
|
|
@ -57,7 +57,7 @@ public class DWARFUtil {
|
||||||
* Returns the field name of a final static variable in class <code>clazz</code>
|
* Returns the field name of a final static variable in class <code>clazz</code>
|
||||||
* which holds a specific value.
|
* which holds a specific value.
|
||||||
* <p>
|
* <p>
|
||||||
* Can be thought of as an enum numeric value to to name lookup.
|
* Can be thought of as an enum numeric value to do a name lookup.
|
||||||
*
|
*
|
||||||
* @param clazz
|
* @param clazz
|
||||||
* @param value
|
* @param value
|
||||||
|
|
|
@ -224,8 +224,8 @@ public interface ElfLoadHelper {
|
||||||
* performed during the ELF import processing. A relocation type of 0 and a status of
|
* performed during the ELF import processing. A relocation type of 0 and a status of
|
||||||
* {@link Status#APPLIED_OTHER} will be applied to the relocation entry.
|
* {@link Status#APPLIED_OTHER} will be applied to the relocation entry.
|
||||||
* NOTE: The number of recorded original FileBytes currently ignores the specified length.
|
* NOTE: The number of recorded original FileBytes currently ignores the specified length.
|
||||||
* However, the length is still used to verify that that the intended modification region
|
* However, the length is still used to verify that the intended modification region
|
||||||
* dose not intersect another relocation.
|
* does not intersect another relocation.
|
||||||
* @param address relocation address
|
* @param address relocation address
|
||||||
* @param length number of bytes affected
|
* @param length number of bytes affected
|
||||||
* @return true if recorded successfully, or false if conflict with existing relocation
|
* @return true if recorded successfully, or false if conflict with existing relocation
|
||||||
|
|
|
@ -96,7 +96,7 @@ public class ElfRelocation implements StructConverter {
|
||||||
* @param reader binary reader positioned at start of relocation entry.
|
* @param reader binary reader positioned at start of relocation entry.
|
||||||
* @param elfHeader ELF header
|
* @param elfHeader ELF header
|
||||||
* @param relocationIndex index of entry in relocation table
|
* @param relocationIndex index of entry in relocation table
|
||||||
* @param withAddend true if if RELA entry with addend, else false
|
* @param withAddend true if it's a RELA entry with addend, else false
|
||||||
* @return ELF relocation object
|
* @return ELF relocation object
|
||||||
* @throws IOException if an IO or parse error occurs
|
* @throws IOException if an IO or parse error occurs
|
||||||
*/
|
*/
|
||||||
|
@ -113,7 +113,7 @@ public class ElfRelocation implements StructConverter {
|
||||||
* relocation entry
|
* relocation entry
|
||||||
* @param elfHeader ELF header
|
* @param elfHeader ELF header
|
||||||
* @param relocationIndex index of entry in relocation table
|
* @param relocationIndex index of entry in relocation table
|
||||||
* @param withAddend true if if RELA entry with addend, else false
|
* @param withAddend true if it's a RELA entry with addend, else false
|
||||||
* @param r_offset The offset for the entry
|
* @param r_offset The offset for the entry
|
||||||
* @param r_info The info value for the entry
|
* @param r_info The info value for the entry
|
||||||
* @param r_addend The signed-addend for the entry (32-bit addends should be signed-extended to 64-bits)
|
* @param r_addend The signed-addend for the entry (32-bit addends should be signed-extended to 64-bits)
|
||||||
|
@ -172,7 +172,7 @@ public class ElfRelocation implements StructConverter {
|
||||||
* a representative instance will be generated with all fields set to 0.
|
* a representative instance will be generated with all fields set to 0.
|
||||||
* @param elfHeader ELF header
|
* @param elfHeader ELF header
|
||||||
* @param relocationTableIndex index of relocation within relocation table
|
* @param relocationTableIndex index of relocation within relocation table
|
||||||
* @param withAddend true if if RELA entry with addend, else false
|
* @param withAddend true if it's a RELA entry with addend, else false
|
||||||
* @throws IOException if an IO or parse error occurs
|
* @throws IOException if an IO or parse error occurs
|
||||||
*/
|
*/
|
||||||
protected void initElfRelocation(BinaryReader reader, ElfHeader elfHeader,
|
protected void initElfRelocation(BinaryReader reader, ElfHeader elfHeader,
|
||||||
|
@ -189,7 +189,7 @@ public class ElfRelocation implements StructConverter {
|
||||||
* Initialize ELF relocation entry using data provided via the parameters.
|
* Initialize ELF relocation entry using data provided via the parameters.
|
||||||
* @param elfHeader ELF header
|
* @param elfHeader ELF header
|
||||||
* @param relocationTableIndex index of relocation within relocation table
|
* @param relocationTableIndex index of relocation within relocation table
|
||||||
* @param withAddend true if if RELA entry with addend, else false
|
* @param withAddend true if it's a RELA entry with addend, else false
|
||||||
* @param offset The offset for the entry (r_offset)
|
* @param offset The offset for the entry (r_offset)
|
||||||
* @param info The info value for the entry (r_info)
|
* @param info The info value for the entry (r_info)
|
||||||
* @param addend The signed-addend (r_addend) for the entry (32-bit addends should
|
* @param addend The signed-addend (r_addend) for the entry (32-bit addends should
|
||||||
|
|
|
@ -28,7 +28,7 @@ public final class LoadCommandTypes {
|
||||||
* After MacOS X 10.1 when a new load command is added that is required to be
|
* After MacOS X 10.1 when a new load command is added that is required to be
|
||||||
* understood by the dynamic linker for the image to execute properly the
|
* understood by the dynamic linker for the image to execute properly the
|
||||||
* LC_REQ_DYLD bit will be or'ed into the load command constant. If the dynamic
|
* LC_REQ_DYLD bit will be or'ed into the load command constant. If the dynamic
|
||||||
* linker sees such a load command it it does not understand will issue a
|
* linker sees such a load command that it does not understand, it will issue a
|
||||||
* "unknown load command required for execution" error and refuse to use the
|
* "unknown load command required for execution" error and refuse to use the
|
||||||
* image. Other load commands without this bit that are not understood will
|
* image. Other load commands without this bit that are not understood will
|
||||||
* simply be ignored.
|
* simply be ignored.
|
||||||
|
|
|
@ -1096,7 +1096,7 @@ public class DyldCacheHeader implements StructConverter {
|
||||||
/**
|
/**
|
||||||
* Gets the {@link DyldCacheLocalSymbolsInfo}.
|
* Gets the {@link DyldCacheLocalSymbolsInfo}.
|
||||||
*
|
*
|
||||||
* @return The {@link DyldCacheLocalSymbolsInfo}. Could be be null if it didn't parse.
|
* @return The {@link DyldCacheLocalSymbolsInfo}. Could be null if it didn't parse.
|
||||||
*/
|
*/
|
||||||
public DyldCacheLocalSymbolsInfo getLocalSymbolsInfo() {
|
public DyldCacheLocalSymbolsInfo getLocalSymbolsInfo() {
|
||||||
return localSymbolsInfo;
|
return localSymbolsInfo;
|
||||||
|
|
|
@ -114,7 +114,7 @@ public class LibObjcOptimization implements StructConverter {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Marks up up this structure in memory
|
* Marks up this structure in memory
|
||||||
*
|
*
|
||||||
* @param program The {@link Program}
|
* @param program The {@link Program}
|
||||||
* @param space The {@link AddressSpace}
|
* @param space The {@link AddressSpace}
|
||||||
|
|
|
@ -190,8 +190,8 @@ class ReferenceLineDispenser extends AbstractLineDispenser {
|
||||||
buf.append(prefix);
|
buf.append(prefix);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//if we already appended a ref the line
|
//if we already appended a ref to the line
|
||||||
//and we are are about to append one more,
|
//and we are about to append one more,
|
||||||
//then we need the delim
|
//then we need the delim
|
||||||
if (refsInCurrLine > 0) {
|
if (refsInCurrLine > 0) {
|
||||||
buf.append(XREFS_DELIM);
|
buf.append(XREFS_DELIM);
|
||||||
|
|
|
@ -114,7 +114,7 @@ public class LibrarySearchPathManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the specified library search path path to the end of the path search list
|
* Adds the specified library search path {@code path} to the end of the path search list
|
||||||
*
|
*
|
||||||
* @param path the library search path to add
|
* @param path the library search path to add
|
||||||
* @return true if the path was appended, false if the path was a duplicate
|
* @return true if the path was appended, false if the path was a duplicate
|
||||||
|
|
|
@ -376,7 +376,7 @@ public abstract class AbstractProgramLoader implements Loader {
|
||||||
return fsrl.getName();
|
return fsrl.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the ByteProvider dosn't have have an FSRL, use the given domainFileName
|
// If the ByteProvider doesn't have an FSRL, use the given domainFileName
|
||||||
return domainFileName;
|
return domainFileName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class LoadResults<T extends DomainObject> implements Iterable<Loaded<T>>
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a a new {@link LoadResults} that contains a new {@link Loaded}
|
* Creates a new {@link LoadResults} that contains a new {@link Loaded}
|
||||||
* {@link DomainObject} created from the given parameters. This new {@link Loaded}
|
* {@link DomainObject} created from the given parameters. This new {@link Loaded}
|
||||||
* {@link DomainObject} is assumed to be the {@link #getPrimary() primary} {@link Loaded}
|
* {@link DomainObject} is assumed to be the {@link #getPrimary() primary} {@link Loaded}
|
||||||
* {@link DomainObject}.
|
* {@link DomainObject}.
|
||||||
|
|
|
@ -832,7 +832,7 @@ public class PeLoader extends AbstractPeDebugLoader {
|
||||||
private Address getILEntryPoint(OptionalHeader optionalHeader) {
|
private Address getILEntryPoint(OptionalHeader optionalHeader) {
|
||||||
// Check to see if this binary has a COMDescriptorDataDirectory in it. If so,
|
// Check to see if this binary has a COMDescriptorDataDirectory in it. If so,
|
||||||
// it might be a .NET binary, and if it is and only has a managed code entry point
|
// it might be a .NET binary, and if it is and only has a managed code entry point
|
||||||
// the value at entry is actually a table index and and row index that we parse in
|
// the value at entry is actually a table index and a row index that we parse in
|
||||||
// the ImageCor20Header class. Use that to create the entry label instead later.
|
// the ImageCor20Header class. Use that to create the entry label instead later.
|
||||||
|
|
||||||
DataDirectory[] dataDirectories = optionalHeader.getDataDirectories();
|
DataDirectory[] dataDirectories = optionalHeader.getDataDirectories();
|
||||||
|
|
|
@ -69,7 +69,7 @@ public class BrowserCodeUnitFormat extends CodeUnitFormat {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a change listener to the underlying format options. When a format change
|
* Add a change listener to the underlying format options. When a format change
|
||||||
* occurs the listener may wish to trigger a refresh of of any formatted code units.
|
* occurs the listener may wish to trigger a refresh of any formatted code units.
|
||||||
* @param listener change listener
|
* @param listener change listener
|
||||||
*/
|
*/
|
||||||
public void addChangeListener(ChangeListener listener) {
|
public void addChangeListener(ChangeListener listener) {
|
||||||
|
|
|
@ -38,7 +38,7 @@ import ghidra.program.util.ProgramLocation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a text label that lists the function tags for each {@link Function}. The
|
* Generates a text label that lists the function tags for each {@link Function}. The
|
||||||
* label will will appear as part of the FUNCTION group in the field map.
|
* label will appear as part of the FUNCTION group in the field map.
|
||||||
*/
|
*/
|
||||||
public class FunctionTagFieldFactory extends FieldFactory {
|
public class FunctionTagFieldFactory extends FieldFactory {
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ import ghidra.program.util.ProgramLocation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Generates a text label on each {@link CodeUnit} that marks the start of a memory block. The
|
* Generates a text label on each {@link CodeUnit} that marks the start of a memory block. The
|
||||||
* label will will appear as part of the PLATE group in the field map.
|
* label will appear as part of the PLATE group in the field map.
|
||||||
*/
|
*/
|
||||||
public class MemoryBlockStartFieldFactory extends FieldFactory {
|
public class MemoryBlockStartFieldFactory extends FieldFactory {
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ public class MultiListingLayoutModel implements ListingModelListener, FormatMode
|
||||||
/**
|
/**
|
||||||
* Returns the ListingLayoutModel for the i'th program.
|
* Returns the ListingLayoutModel for the i'th program.
|
||||||
* @param index the index of program for which to return a listing model
|
* @param index the index of program for which to return a listing model
|
||||||
* @return the the ListingLayoutModel for the i'th program.
|
* @return the ListingLayoutModel for the i'th program.
|
||||||
*/
|
*/
|
||||||
public ListingModel getAlignedModel(int index) {
|
public ListingModel getAlignedModel(int index) {
|
||||||
return alignedModels[index];
|
return alignedModels[index];
|
||||||
|
|
|
@ -34,7 +34,7 @@ public interface TableDataLoader<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads data into the given accumulator
|
* Loads data into the given accumulator
|
||||||
* @param accumulator the the accumulator for storing table data
|
* @param accumulator the accumulator for storing table data
|
||||||
* @param monitor the {@link TaskMonitor}
|
* @param monitor the {@link TaskMonitor}
|
||||||
* @throws CancelledException if the operation is cancelled
|
* @throws CancelledException if the operation is cancelled
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -25,7 +25,7 @@ import ghidra.formats.gfilesystem.crypto.PasswordDialog.RESULT_STATE;
|
||||||
import ghidra.framework.generic.auth.Password;
|
import ghidra.framework.generic.auth.Password;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pops up up a GUI dialog prompting the user to enter a password for the specified file.
|
* Pops up a GUI dialog prompting the user to enter a password for the specified file.
|
||||||
* <p>
|
* <p>
|
||||||
* The dialog is presented to the user when the iterator's hasNext() is called.
|
* The dialog is presented to the user when the iterator's hasNext() is called.
|
||||||
* <p>
|
* <p>
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class GhidraProgramUtilities {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the current program for the given tool or null if no program is open.
|
* Returns the current program for the given tool or null if no program is open.
|
||||||
* @param tool the tool get get the current program for
|
* @param tool the tool get the current program for
|
||||||
* @return the current program for the given tool or null if no program is open
|
* @return the current program for the given tool or null if no program is open
|
||||||
*/
|
*/
|
||||||
public static Program getCurrentProgram(PluginTool tool) {
|
public static Program getCurrentProgram(PluginTool tool) {
|
||||||
|
|
|
@ -410,7 +410,7 @@ public class ProgramDiff {
|
||||||
* program1 and program2.
|
* program1 and program2.
|
||||||
* @return the initialized memory addresses in common between
|
* @return the initialized memory addresses in common between
|
||||||
* program1 and program2.
|
* program1 and program2.
|
||||||
* The addresses in the this set are derived from program1.
|
* The addresses in this set are derived from program1.
|
||||||
*/
|
*/
|
||||||
public AddressSet getInitializedInCommon() {
|
public AddressSet getInitializedInCommon() {
|
||||||
return pgmMemComp.getInitializedAddressesInCommon();
|
return pgmMemComp.getInitializedAddressesInCommon();
|
||||||
|
|
|
@ -424,7 +424,7 @@ public class ProgramMemoryUtil {
|
||||||
* Direct references are only found at addresses that match the indicated alignment.
|
* Direct references are only found at addresses that match the indicated alignment.
|
||||||
* @param program the program whose memory is to be checked.
|
* @param program the program whose memory is to be checked.
|
||||||
* @param alignment direct references are to only be found at the indicated alignment in memory.
|
* @param alignment direct references are to only be found at the indicated alignment in memory.
|
||||||
* @param codeUnit the code unit to to search for references to.
|
* @param codeUnit the code unit to search for references.
|
||||||
* @param monitor a task monitor for progress or to allow canceling.
|
* @param monitor a task monitor for progress or to allow canceling.
|
||||||
* @return list of addresses referring directly to the toAddress.
|
* @return list of addresses referring directly to the toAddress.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -124,7 +124,7 @@ public abstract class AbstractSelectionNavigationAction extends ToggleDockingAct
|
||||||
|
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
// We want to load our state after we have been associated with a DockingWindowManager.
|
// We want to load our state after we have been associated with a DockingWindowManager.
|
||||||
// If the table is displayable, then we are are properly setup...
|
// If the table is displayable, then we are properly setup...
|
||||||
if (table.isDisplayable()) {
|
if (table.isDisplayable()) {
|
||||||
restoreState();
|
restoreState();
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -32,7 +32,7 @@ import docking.widgets.table.*;
|
||||||
* and Addresses.
|
* and Addresses.
|
||||||
* <p>
|
* <p>
|
||||||
* This interface is an ExtensionPoint so that once created, they will be ingested automatically
|
* This interface is an ExtensionPoint so that once created, they will be ingested automatically
|
||||||
* by Ghidra. Once discovered, these mappers will be used to provide dynamic columns to to
|
* by Ghidra. Once discovered, these mappers will be used to provide dynamic columns to
|
||||||
* tables with row types that match <code>ROW_TYPE</code>.
|
* tables with row types that match <code>ROW_TYPE</code>.
|
||||||
* <p>
|
* <p>
|
||||||
* This column is an extension of {@link TableRowMapper} that has knowledge of
|
* This column is an extension of {@link TableRowMapper} that has knowledge of
|
||||||
|
|
|
@ -71,7 +71,7 @@ public class LocationReferencesPlugin1Test extends AbstractLocationReferencesTes
|
||||||
Address otherAddress = addr(0x01008014); // 0x1 ONE; this also has references
|
Address otherAddress = addr(0x01008014); // 0x1 ONE; this also has references
|
||||||
assertTrue(applyCmd(program, new CreateDataCmd(otherAddress, enoom)));
|
assertTrue(applyCmd(program, new CreateDataCmd(otherAddress, enoom)));
|
||||||
|
|
||||||
// this is the address will will use to search
|
// this is the address we will use to search
|
||||||
Address address = addr(0x01008019); // 0x0 ZERO
|
Address address = addr(0x01008019); // 0x0 ZERO
|
||||||
assertTrue(applyCmd(program, new CreateDataCmd(address, enoom)));
|
assertTrue(applyCmd(program, new CreateDataCmd(address, enoom)));
|
||||||
|
|
||||||
|
|
|
@ -242,7 +242,7 @@ public class SearchTextPlugin1Test extends AbstractGhidraHeadedIntegrationTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSearchStringEntry() throws Exception {
|
public void testSearchStringEntry() throws Exception {
|
||||||
// verify that a string string must be entered
|
// verify that a string must be entered
|
||||||
|
|
||||||
SearchTextDialog dialog = getDialog();
|
SearchTextDialog dialog = getDialog();
|
||||||
|
|
||||||
|
|
|
@ -759,7 +759,7 @@ public class SymbolTreePlugin1Test extends AbstractGhidraHeadedIntegrationTest {
|
||||||
|
|
||||||
//
|
//
|
||||||
// This tests a particular edge case where adding a function inside of a class would cause
|
// This tests a particular edge case where adding a function inside of a class would cause
|
||||||
// the tree to throw an exception to to an improper child node lookup. This test was
|
// the tree to throw an exception due to an improper child node lookup. This test was
|
||||||
// triggering the exception before the fix.
|
// triggering the exception before the fix.
|
||||||
//
|
//
|
||||||
showSymbolTree();
|
showSymbolTree();
|
||||||
|
|
|
@ -595,7 +595,7 @@ public class DataTypeSelectionDialogTest extends AbstractGhidraHeadedIntegration
|
||||||
// We are trying to test that the user can type the name of a type (not pick it from the
|
// We are trying to test that the user can type the name of a type (not pick it from the
|
||||||
// list) that exists in an open archive *that is not set on the dialog*. The intent is
|
// list) that exists in an open archive *that is not set on the dialog*. The intent is
|
||||||
// that if we have to parse the text provided by the user, that we don't automatically
|
// that if we have to parse the text provided by the user, that we don't automatically
|
||||||
// pick one when it is an an archive that we didn't specify (like the program archive).
|
// pick one when it is an archive that we didn't specify (like the program archive).
|
||||||
//
|
//
|
||||||
// To test this, start with 3 types in a file archive: foo and a typedef to foo
|
// To test this, start with 3 types in a file archive: foo and a typedef to foo
|
||||||
// (foo_typedef) and a pointer to the typedef.
|
// (foo_typedef) and a pointer to the typedef.
|
||||||
|
|
|
@ -182,7 +182,7 @@ int (__stdcall * GetSectionBlock) (
|
||||||
|
|
||||||
#pragma region Input compatibility macros
|
#pragma region Input compatibility macros
|
||||||
|
|
||||||
// nothing will parse after this line if the this fails
|
// nothing will parse after this line if this fails
|
||||||
#pragma test for, pragma, with, commas outside parens
|
#pragma test for, pragma, with, commas outside parens
|
||||||
|
|
||||||
#pragma region System Family (kernel drivers) with Desktop Family for compat
|
#pragma region System Family (kernel drivers) with Desktop Family for compat
|
||||||
|
|
|
@ -318,7 +318,7 @@
|
||||||
<BLOCKQUOTE>
|
<BLOCKQUOTE>
|
||||||
<P>This will merge the selected sequences into one sequence. For a given bit
|
<P>This will merge the selected sequences into one sequence. For a given bit
|
||||||
position in the merged sequence, if all selected sequences agree on that position
|
position in the merged sequence, if all selected sequences agree on that position
|
||||||
the the merge will contain that value, otherwise it will contain a dit in that
|
the merge will contain that value, otherwise it will contain a dit in that
|
||||||
position.</P>
|
position.</P>
|
||||||
</BLOCKQUOTE>
|
</BLOCKQUOTE>
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@ public class FunctionStartFuncAnalyzer extends FunctionStartAnalyzer {
|
||||||
throws CancelledException {
|
throws CancelledException {
|
||||||
|
|
||||||
// check that the check function later property has been set at the functions start
|
// check that the check function later property has been set at the functions start
|
||||||
// before passing the cut down address set to the real search algorithm to to the correct action
|
// before passing the cut down address set to the real search algorithm to take the correct action
|
||||||
AddressSet potentialPreMatches =
|
AddressSet potentialPreMatches =
|
||||||
getOrCreatePotentialMatchPropertyMap(program).getAddressSet();
|
getOrCreatePotentialMatchPropertyMap(program).getAddressSet();
|
||||||
set = set.intersect(potentialPreMatches);
|
set = set.intersect(potentialPreMatches);
|
||||||
|
|
|
@ -286,7 +286,7 @@ public class MemoryByteBlock implements ByteBlock {
|
||||||
* it should return 0. A natural alignment only exists if there is some underlying indexing
|
* it should return 0. A natural alignment only exists if there is some underlying indexing
|
||||||
* structure that isn't based at 0. For example, if the underlying structure is address based
|
* structure that isn't based at 0. For example, if the underlying structure is address based
|
||||||
* and the starting address is not 0, then the natural alignment is the address offset mod the
|
* and the starting address is not 0, then the natural alignment is the address offset mod the
|
||||||
* radix (if the starting address is 10 and the radix is 4, then then the alignment is 2)).
|
* radix (if the starting address is 10 and the radix is 4, then the alignment is 2)).
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public int getAlignment(int radix) {
|
public int getAlignment(int radix) {
|
||||||
|
|
|
@ -151,7 +151,7 @@ public interface ByteBlock {
|
||||||
* there is some underlying indexing structure that isn't based at 0. For example,
|
* there is some underlying indexing structure that isn't based at 0. For example,
|
||||||
* if the underlying structure is address based and the starting address is not 0,
|
* if the underlying structure is address based and the starting address is not 0,
|
||||||
* then the natural alignment is the address offset mod the radix (if the starting
|
* then the natural alignment is the address offset mod the radix (if the starting
|
||||||
* address is 10 and the radix is 4, then then the alignment is 2)).
|
* address is 10 and the radix is 4, then the alignment is 2)).
|
||||||
*/
|
*/
|
||||||
public int getAlignment(int radix);
|
public int getAlignment(int radix);
|
||||||
}
|
}
|
||||||
|
|
|
@ -692,7 +692,7 @@ public class Pinning {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine if a token should be be filtered from match display.
|
* Determine if a token should be filtered from match display.
|
||||||
* Some tokens like "," and " " may be attached to matchable operations but can
|
* Some tokens like "," and " " may be attached to matchable operations but can
|
||||||
* clutter the display if they are highlighted for a match.
|
* clutter the display if they are highlighted for a match.
|
||||||
* @param token is the specific token to check
|
* @param token is the specific token to check
|
||||||
|
|
|
@ -136,7 +136,7 @@ public:
|
||||||
|
|
||||||
/// \brief A group of actions (generally) applied in sequence
|
/// \brief A group of actions (generally) applied in sequence
|
||||||
///
|
///
|
||||||
/// This is a a list of Action objects, which are usually applied in sequence.
|
/// This is a list of Action objects, which are usually applied in sequence.
|
||||||
/// But the behavior properties of each individual Action may affect this.
|
/// But the behavior properties of each individual Action may affect this.
|
||||||
/// Properties (like rule_repeatapply) may be put directly to this group
|
/// Properties (like rule_repeatapply) may be put directly to this group
|
||||||
/// that also affect how the Actions are applied.
|
/// that also affect how the Actions are applied.
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
/// \file address.hh
|
/// \file address.hh
|
||||||
/// \brief Classes for specifying addresses and other low-level constants
|
/// \brief Classes for specifying addresses and other low-level constants
|
||||||
///
|
///
|
||||||
/// All addresses are absolute and there are are no registers in CPUI. However,
|
/// All addresses are absolute and there are no registers in CPUI. However,
|
||||||
/// all addresses are prefixed with an "immutable" pointer, which can
|
/// all addresses are prefixed with an "immutable" pointer, which can
|
||||||
/// specify a separate RAM space, a register space, an i/o space etc. Thus
|
/// specify a separate RAM space, a register space, an i/o space etc. Thus
|
||||||
/// a translation from a real machine language will typically simulate registers
|
/// a translation from a real machine language will typically simulate registers
|
||||||
|
|
|
@ -1166,7 +1166,7 @@ ProtoModel *Architecture::createUnknownModel(const string &modelName)
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This looks for the \<processor_spec> tag and and sets configuration
|
/// This looks for the \<processor_spec> tag and sets configuration
|
||||||
/// parameters based on it.
|
/// parameters based on it.
|
||||||
/// \param store is the document store holding the tag
|
/// \param store is the document store holding the tag
|
||||||
void Architecture::parseProcessorConfig(DocumentStorage &store)
|
void Architecture::parseProcessorConfig(DocumentStorage &store)
|
||||||
|
|
|
@ -398,7 +398,7 @@ bool FlowBlock::dominates(const FlowBlock *subBlock) const
|
||||||
/// We assume the given block has 2 out-edges and that \b this block is immediately reached by
|
/// We assume the given block has 2 out-edges and that \b this block is immediately reached by
|
||||||
/// one of these two edges. Some condition holds when traversing the out-edge to \b this, and the complement
|
/// one of these two edges. Some condition holds when traversing the out-edge to \b this, and the complement
|
||||||
/// of the condition holds for traversing the other out-edge. We verify that the condition holds for
|
/// of the condition holds for traversing the other out-edge. We verify that the condition holds for
|
||||||
/// this entire block. More specifically, we check that that there is no path to \b this through the
|
/// this entire block. More specifically, we check that there is no path to \b this through the
|
||||||
/// sibling edge, where the complement of the condition holds (unless we loop back through the conditional block).
|
/// sibling edge, where the complement of the condition holds (unless we loop back through the conditional block).
|
||||||
/// \param cond is the conditional block with 2 out-edges
|
/// \param cond is the conditional block with 2 out-edges
|
||||||
/// \return \b true if the condition holds for this block
|
/// \return \b true if the condition holds for this block
|
||||||
|
@ -3479,7 +3479,7 @@ void BlockSwitch::addCase(FlowBlock *switchbl,FlowBlock *bl,uint4 gt)
|
||||||
void BlockSwitch::grabCaseBasic(FlowBlock *switchbl,const vector<FlowBlock *> &cs)
|
void BlockSwitch::grabCaseBasic(FlowBlock *switchbl,const vector<FlowBlock *> &cs)
|
||||||
|
|
||||||
{
|
{
|
||||||
vector<int4> casemap(switchbl->sizeOut(),-1); // Map from from switchtarget's outindex to position in caseblocks
|
vector<int4> casemap(switchbl->sizeOut(),-1); // Map from switchtarget's outindex to position in caseblocks
|
||||||
caseblocks.clear();
|
caseblocks.clear();
|
||||||
for(int4 i=1;i<cs.size();++i) {
|
for(int4 i=1;i<cs.size();++i) {
|
||||||
FlowBlock *casebl = cs[i];
|
FlowBlock *casebl = cs[i];
|
||||||
|
|
|
@ -163,7 +163,7 @@ class TraceDAG {
|
||||||
FlowBlock *finishblock; ///< Designated exit block for the DAG (or null)
|
FlowBlock *finishblock; ///< Designated exit block for the DAG (or null)
|
||||||
void removeTrace(BlockTrace *trace); ///< Remove the indicated BlockTrace
|
void removeTrace(BlockTrace *trace); ///< Remove the indicated BlockTrace
|
||||||
void processExitConflict(list<BadEdgeScore>::iterator start,list<BadEdgeScore>::iterator end);
|
void processExitConflict(list<BadEdgeScore>::iterator start,list<BadEdgeScore>::iterator end);
|
||||||
BlockTrace *selectBadEdge(void); ///< Select the the most likely unstructured edge from active BlockTraces
|
BlockTrace *selectBadEdge(void); ///< Select the most likely unstructured edge from active BlockTraces
|
||||||
void insertActive(BlockTrace *trace); ///< Move a BlockTrace into the \e active category
|
void insertActive(BlockTrace *trace); ///< Move a BlockTrace into the \e active category
|
||||||
void removeActive(BlockTrace *trace); ///< Remove a BlockTrace from the \e active category
|
void removeActive(BlockTrace *trace); ///< Remove a BlockTrace from the \e active category
|
||||||
bool checkOpen(BlockTrace *trace); ///< Check if we can push the given BlockTrace into its next node
|
bool checkOpen(BlockTrace *trace); ///< Check if we can push the given BlockTrace into its next node
|
||||||
|
|
|
@ -177,8 +177,8 @@ uint4 ArraySequence::selectStringCopyFunction(int4 &index)
|
||||||
/// \brief Set-up for recovering COPY ops into a memory range, given a Symbol and an Address being COPYed into
|
/// \brief Set-up for recovering COPY ops into a memory range, given a Symbol and an Address being COPYed into
|
||||||
///
|
///
|
||||||
/// The SymbolEntry and Address are passed in, with an expected data-type. Check if there is an array
|
/// The SymbolEntry and Address are passed in, with an expected data-type. Check if there is an array
|
||||||
/// of the data-type within the Symbol, and if so, initialize the memory range for the the sequence.
|
/// of the data-type within the Symbol, and if so, initialize the memory range for the sequence.
|
||||||
/// Follow on with gathering PcodeOps and testing if the sequence is viable. If not, the the size the memory
|
/// Follow on with gathering PcodeOps and testing if the sequence is viable. If not, the size of the memory
|
||||||
/// range will be set to zero.
|
/// range will be set to zero.
|
||||||
/// \param fdata is the function containing the root COPY
|
/// \param fdata is the function containing the root COPY
|
||||||
/// \param ct is the specific data-type for which there should be an array
|
/// \param ct is the specific data-type for which there should be an array
|
||||||
|
|
|
@ -61,7 +61,7 @@ SymbolEntry::SymbolEntry(Symbol *sym)
|
||||||
/// is set to \e invalid, and the \b hash becomes the primary location information.
|
/// is set to \e invalid, and the \b hash becomes the primary location information.
|
||||||
/// \param sym is the underlying Symbol
|
/// \param sym is the underlying Symbol
|
||||||
/// \param exfl are the Varnode flags associated with the storage location
|
/// \param exfl are the Varnode flags associated with the storage location
|
||||||
/// \param h is the the hash
|
/// \param h is the hash
|
||||||
/// \param off if the offset into the Symbol for this (piece of) storage
|
/// \param off if the offset into the Symbol for this (piece of) storage
|
||||||
/// \param sz is the size in bytes of this (piece of) storage
|
/// \param sz is the size in bytes of this (piece of) storage
|
||||||
/// \param rnglist is the set of code addresses where \b this SymbolEntry represents the Symbol
|
/// \param rnglist is the set of code addresses where \b this SymbolEntry represents the Symbol
|
||||||
|
|
|
@ -713,7 +713,7 @@ public:
|
||||||
|
|
||||||
/// \brief Restore attributes for \b this from a parent element that is not a Scope
|
/// \brief Restore attributes for \b this from a parent element that is not a Scope
|
||||||
///
|
///
|
||||||
/// Attributes are read from the (already opened) element, prior to reading reading the
|
/// Attributes are read from the (already opened) element, prior to reading the
|
||||||
/// \<scope> element specific to \b this Scope
|
/// \<scope> element specific to \b this Scope
|
||||||
/// \param decoder is the stream decoder
|
/// \param decoder is the stream decoder
|
||||||
virtual void decodeWrappingAttributes(Decoder &decoder) {}
|
virtual void decodeWrappingAttributes(Decoder &decoder) {}
|
||||||
|
|
|
@ -206,7 +206,7 @@ bool ParamEntry::containedBy(const Address &addr,int4 sz) const
|
||||||
return (entryoff <= rangeoff);
|
return (entryoff <= rangeoff);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// If \b this a a \e join, each piece is tested for intersection.
|
/// If \b this is a \e join, each piece is tested for intersection.
|
||||||
/// Otherwise, \b this, considered as a single memory, is tested for intersection.
|
/// Otherwise, \b this, considered as a single memory, is tested for intersection.
|
||||||
/// \param addr is the starting address of the given memory range to test against
|
/// \param addr is the starting address of the given memory range to test against
|
||||||
/// \param sz is the number of bytes in the given memory range
|
/// \param sz is the number of bytes in the given memory range
|
||||||
|
|
|
@ -1724,7 +1724,7 @@ void Funcdata::prepareThisPointer(void)
|
||||||
return; // Data-type will be obtained directly from symbol
|
return; // Data-type will be obtained directly from symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
// Its possible that a recommendation for the "this" pointer has already been been collected.
|
// It's possible that a recommendation for the "this" pointer has already been collected.
|
||||||
// Currently the only type recommendations are for the "this" pointer. If there any, it is for "this"
|
// Currently the only type recommendations are for the "this" pointer. If there any, it is for "this"
|
||||||
if (localmap->hasTypeRecommendations())
|
if (localmap->hasTypeRecommendations())
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1083,7 +1083,7 @@ bool Heritage::discoverIndexedStackPointers(AddrSpace *spc,vector<PcodeOp *> &fr
|
||||||
// If there were no traversals (of non-constant ADD or MULTIEQUAL) then the
|
// If there were no traversals (of non-constant ADD or MULTIEQUAL) then the
|
||||||
// pointer is equal to the stackpointer plus a constant (through an indirect is possible)
|
// pointer is equal to the stackpointer plus a constant (through an indirect is possible)
|
||||||
// This will likely get resolved in the next heritage pass, but we leave the
|
// This will likely get resolved in the next heritage pass, but we leave the
|
||||||
// spacebaseptr mark on, so that that the indirects don't get removed
|
// spacebaseptr mark on, so the indirects don't get removed
|
||||||
fd->opMarkSpacebasePtr(op);
|
fd->opMarkSpacebasePtr(op);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -801,7 +801,7 @@ void Merge::collectInputs(HighVariable *high,vector<PcodeOpNode> &oplist,PcodeOp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// \brief Snip instances of the output of an INDIRECT that are also inputs to to the underlying PcodeOp
|
/// \brief Snip instances of the output of an INDIRECT that are also inputs to the underlying PcodeOp
|
||||||
///
|
///
|
||||||
/// Examine the output HighVariable for the given INDIRECT op. Varnode instances (or pieces) that are also
|
/// Examine the output HighVariable for the given INDIRECT op. Varnode instances (or pieces) that are also
|
||||||
/// inputs to the underlying PcodeOp causing the INDIRECT are snipped by creating a new COPY op from the
|
/// inputs to the underlying PcodeOp causing the INDIRECT are snipped by creating a new COPY op from the
|
||||||
|
|
|
@ -440,7 +440,7 @@ public:
|
||||||
|
|
||||||
/// \brief Set a pending print callback
|
/// \brief Set a pending print callback
|
||||||
///
|
///
|
||||||
/// The callback will be issued prior to the the next call to tagLine() unless
|
/// The callback will be issued prior to the next call to tagLine() unless
|
||||||
/// a the method cancelPendingPrint() is called first.
|
/// a the method cancelPendingPrint() is called first.
|
||||||
/// \param pend is the callback to be issued
|
/// \param pend is the callback to be issued
|
||||||
void setPendingPrint(PendPrint *pend) { pendPrint = pend; }
|
void setPendingPrint(PendPrint *pend) { pendPrint = pend; }
|
||||||
|
|
|
@ -361,7 +361,7 @@ public:
|
||||||
///
|
///
|
||||||
/// When a variable has TypePointerRel as its data-type, PTRSUB acts relative to the \e parent
|
/// When a variable has TypePointerRel as its data-type, PTRSUB acts relative to the \e parent
|
||||||
/// data-type. We print a specific token to indicate this relative shift is happening.
|
/// data-type. We print a specific token to indicate this relative shift is happening.
|
||||||
/// \param op is is the PTRSUB op
|
/// \param op is the PTRSUB op
|
||||||
inline void PrintC::pushTypePointerRel(const PcodeOp *op)
|
inline void PrintC::pushTypePointerRel(const PcodeOp *op)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
|
@ -200,7 +200,7 @@ CircleRange::CircleRange(bool val)
|
||||||
|
|
||||||
/// A size specifies the number of bytes (*8 to get number of bits) in the mask.
|
/// A size specifies the number of bytes (*8 to get number of bits) in the mask.
|
||||||
/// The stride is assumed to be 1.
|
/// The stride is assumed to be 1.
|
||||||
/// \param val is is the single value
|
/// \param val is the single value
|
||||||
/// \param size is the size of the mask in bytes
|
/// \param size is the size of the mask in bytes
|
||||||
CircleRange::CircleRange(uintb val,int4 size)
|
CircleRange::CircleRange(uintb val,int4 size)
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ void CircleRange::setRange(uintb lft,uintb rgt,int4 size,int4 stp)
|
||||||
|
|
||||||
/// A size specifies the number of bytes (*8 to get number of bits) in the mask.
|
/// A size specifies the number of bytes (*8 to get number of bits) in the mask.
|
||||||
/// The stride is assumed to be 1.
|
/// The stride is assumed to be 1.
|
||||||
/// \param val is is the single value
|
/// \param val is the single value
|
||||||
/// \param size is the size of the mask in bytes
|
/// \param size is the size of the mask in bytes
|
||||||
void CircleRange::setRange(uintb val,int4 size)
|
void CircleRange::setRange(uintb val,int4 size)
|
||||||
|
|
||||||
|
|
|
@ -6176,7 +6176,7 @@ bool AddTreeState::checkTerm(Varnode *vn,uint8 treeCoeff)
|
||||||
|
|
||||||
/// Recursively walk the sub-tree from the given root.
|
/// Recursively walk the sub-tree from the given root.
|
||||||
/// Terms that are a \e multiple of the base data-type size are accumulated either in
|
/// Terms that are a \e multiple of the base data-type size are accumulated either in
|
||||||
/// the the sum of constant multiples or the container of non-constant multiples.
|
/// the sum of constant multiples or the container of non-constant multiples.
|
||||||
/// Terms that are a \e non-multiple are accumulated either in the sum of constant
|
/// Terms that are a \e non-multiple are accumulated either in the sum of constant
|
||||||
/// non-multiples or the container of non-constant non-multiples. The constant
|
/// non-multiples or the container of non-constant non-multiples. The constant
|
||||||
/// non-multiples are counted twice, once in the sum, and once in the container.
|
/// non-multiples are counted twice, once in the sum, and once in the container.
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue