mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2025-10-05 19:42:36 +02:00
GP-862 Refactor of Composite interface and internals. Changes made to
packing and alignment methods (see WhatsNew.html for API changes).
This commit is contained in:
parent
3b867b3444
commit
da800b6e41
166 changed files with 6316 additions and 5486 deletions
|
@ -266,7 +266,7 @@ public class DefaultCompositeMember extends CompositeMember {
|
|||
}
|
||||
|
||||
/**
|
||||
* Adjust unaligned structure following member reconstruction.
|
||||
* Adjust non-packed structure following member reconstruction.
|
||||
* @param preferredSize preferred size
|
||||
*/
|
||||
private void adjustSize(int preferredSize) {
|
||||
|
@ -325,18 +325,21 @@ public class DefaultCompositeMember extends CompositeMember {
|
|||
Composite copy = (Composite) composite.copy(dataTypeManager);
|
||||
|
||||
int pack = 0;
|
||||
copy.setPackingValue(pack);
|
||||
copy.setToDefaultPacking();
|
||||
|
||||
boolean alignOK = isGoodAlignment(copy, preferredSize);
|
||||
if (!alignOK) {
|
||||
pack = 1;
|
||||
copy.setPackingValue(pack);
|
||||
alignOK = isGoodAlignment(copy, preferredSize);
|
||||
}
|
||||
if (alignOK) {
|
||||
composite.setPackingValue(pack);
|
||||
composite.setToDefaultPacking();
|
||||
}
|
||||
else if (errorConsumer != null && !isClass) { // don't complain about Class structs which always fail
|
||||
else {
|
||||
pack = 1;
|
||||
copy.setExplicitPackingValue(pack);
|
||||
alignOK = isGoodAlignment(copy, preferredSize);
|
||||
if (alignOK) {
|
||||
composite.setExplicitPackingValue(pack);
|
||||
}
|
||||
}
|
||||
if (!alignOK && errorConsumer != null && !isClass) { // don't complain about Class structs which always fail
|
||||
String anonymousStr = parent != null ? " anonymous " : "";
|
||||
errorConsumer.accept("PDB " + anonymousStr + memberType +
|
||||
" reconstruction failed to align " + composite.getPathName());
|
||||
|
@ -352,11 +355,11 @@ public class DefaultCompositeMember extends CompositeMember {
|
|||
if (alignOK && isStructureContainer()) {
|
||||
// verify that components did not move
|
||||
Structure struct = (Structure) memberDataType;
|
||||
DataTypeComponent[] unalignedComponents = struct.getDefinedComponents();
|
||||
DataTypeComponent[] nonPackedComponents = struct.getDefinedComponents();
|
||||
int index = 0;
|
||||
for (DataTypeComponent dtc : testComposite.getComponents()) {
|
||||
DataTypeComponent unalignedDtc = unalignedComponents[index++];
|
||||
if (!isComponentUnchanged(dtc, unalignedDtc)) {
|
||||
DataTypeComponent nonPackedDtc = nonPackedComponents[index++];
|
||||
if (!isComponentUnchanged(dtc, nonPackedDtc)) {
|
||||
alignOK = false;
|
||||
break;
|
||||
}
|
||||
|
@ -365,18 +368,18 @@ public class DefaultCompositeMember extends CompositeMember {
|
|||
return alignOK;
|
||||
}
|
||||
|
||||
private boolean isComponentUnchanged(DataTypeComponent dtc, DataTypeComponent unalignedDtc) {
|
||||
if (unalignedDtc.getOffset() != dtc.getOffset() ||
|
||||
unalignedDtc.getLength() != dtc.getLength() ||
|
||||
unalignedDtc.isBitFieldComponent() != dtc.isBitFieldComponent()) {
|
||||
private boolean isComponentUnchanged(DataTypeComponent dtc, DataTypeComponent nonPackedDtc) {
|
||||
if (nonPackedDtc.getOffset() != dtc.getOffset() ||
|
||||
nonPackedDtc.getLength() != dtc.getLength() ||
|
||||
nonPackedDtc.isBitFieldComponent() != dtc.isBitFieldComponent()) {
|
||||
return false;
|
||||
}
|
||||
if (dtc.isBitFieldComponent()) {
|
||||
// both components are bit fields
|
||||
BitFieldDataType bitfieldDt = (BitFieldDataType) dtc.getDataType();
|
||||
BitFieldDataType unalignedBitfieldDt = (BitFieldDataType) unalignedDtc.getDataType();
|
||||
if (bitfieldDt.getBitOffset() != unalignedBitfieldDt.getBitOffset() ||
|
||||
bitfieldDt.getBitSize() != unalignedBitfieldDt.getBitSize()) {
|
||||
BitFieldDataType nonPackedBitfieldDt = (BitFieldDataType) nonPackedDtc.getDataType();
|
||||
if (bitfieldDt.getBitOffset() != nonPackedBitfieldDt.getBitOffset() ||
|
||||
bitfieldDt.getBitSize() != nonPackedBitfieldDt.getBitSize()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -105,32 +105,6 @@ final class PdbUtil {
|
|||
return false;
|
||||
}
|
||||
|
||||
// final static void ensureSize(int expectedLength, Composite composite, MessageLog log) {
|
||||
// int actualLength = composite.getLength();
|
||||
// if (actualLength < expectedLength) {
|
||||
//
|
||||
// composite.setInternallyAligned(false);
|
||||
// if (composite instanceof Structure) {
|
||||
// Structure struct = (Structure) composite;
|
||||
// // if this is an empty structure, the structure will lie to us
|
||||
// // and say it has one element so add 1 to growth factor
|
||||
// struct.growStructure(
|
||||
// expectedLength - actualLength + (struct.isNotYetDefined() ? 1 : 0));
|
||||
// }
|
||||
// // must be a union data type
|
||||
// else {
|
||||
// DataType datatype = new ArrayDataType(DataType.DEFAULT, expectedLength,
|
||||
// DataType.DEFAULT.getLength());
|
||||
// composite.add(datatype);
|
||||
// }
|
||||
// }
|
||||
// else if (actualLength > expectedLength) {
|
||||
// log.appendMsg("PDB", "Composite data type generated from PDB has size mismatch. " +
|
||||
// composite.getName() + ": expected 0x" + Integer.toHexString(expectedLength) +
|
||||
// ", but was 0x" + Integer.toHexString(actualLength));
|
||||
// }
|
||||
// }
|
||||
|
||||
final static void clearComponents(Composite composite) {
|
||||
if (composite instanceof Structure) {
|
||||
((Structure) composite).deleteAll();
|
||||
|
|
|
@ -124,7 +124,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/struct\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure struct {\n" +
|
||||
" 0 uchar 1 a \"\"\n" +
|
||||
" 1 uchar:4(0) 1 b \"\"\n" +
|
||||
|
@ -159,7 +159,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/struct\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure struct {\n" +
|
||||
" 0 uchar 1 a \"\"\n" +
|
||||
" 1 uchar:2(0) 1 padding \"\"\n" +
|
||||
|
@ -222,20 +222,20 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/struct\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure struct {\n" +
|
||||
" 0 struct_u_0 1 null \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/struct/struct_u_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union struct_u_0 {\n" +
|
||||
" 0 struct_u_0_s_0 1 _s_0 \"\"\n" +
|
||||
" 0 struct_u_0_s_1 1 _s_1 \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/struct/struct_u_0/struct_u_0_s_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure struct_u_0_s_0 {\n" +
|
||||
" 0 char:1(0) 1 a0 \"\"\n" +
|
||||
" 0 char:1(1) 1 padding \"\"\n" +
|
||||
|
@ -245,7 +245,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/struct/struct_u_0/struct_u_0_s_1\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure struct_u_0_s_1 {\n" +
|
||||
" 0 char:1(0) 1 padding \"\"\n" +
|
||||
" 0 char:1(1) 1 a1 \"\"\n" +
|
||||
|
@ -285,7 +285,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/union\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union union {\n" +
|
||||
" 0 uchar 1 a \"\"\n" +
|
||||
" 0 union_s_1 1 _s_1 \"\"\n" +
|
||||
|
@ -294,14 +294,14 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 2 Actual Alignment = 2\n" +
|
||||
"/union/union_s_1\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure union_s_1 {\n" +
|
||||
" 0 uchar:4(0) 1 b \"\"\n" +
|
||||
" 0 uchar:4(4) 1 c \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/union/union_s_2\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure union_s_2 {\n" +
|
||||
" 0 uchar:4(0) 1 d \"\"\n" +
|
||||
" 0 uchar:4(4) 1 e \"\"\n" +
|
||||
|
@ -328,7 +328,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/struct\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure struct {\n" +
|
||||
" 0 char 1 a \"\"\n" +
|
||||
" char[0] 0 e \"\"\n" +
|
||||
|
@ -353,20 +353,20 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
new MyPdbMember("f", "char[0]", 8));
|
||||
//@formatter:on
|
||||
|
||||
assertTrue(DefaultCompositeMember.applyDataTypeMembers(struct, false, 12, members, this,
|
||||
assertTrue(DefaultCompositeMember.applyDataTypeMembers(struct, false, 16, members, this,
|
||||
TaskMonitor.DUMMY));
|
||||
|
||||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/union\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union union {\n" +
|
||||
" 0 union_s_0 12 _s_0 \"\"\n" +
|
||||
" 0 union_s_1 8 _s_1 \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 12 Actual Alignment = 8\n" +
|
||||
"Size = 16 Actual Alignment = 8\n" +
|
||||
"/union/union_s_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure union_s_0 {\n" +
|
||||
" 0 int 4 a \"\"\n" +
|
||||
" 4 int 4 b \"\"\n" +
|
||||
|
@ -375,7 +375,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 12 Actual Alignment = 4\n" +
|
||||
"/union/union_s_1\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure union_s_1 {\n" +
|
||||
" 0 longlong 8 e \"\"\n" +
|
||||
" char[0] 0 f \"\"\n" +
|
||||
|
@ -405,14 +405,14 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/union\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union union {\n" +
|
||||
" 0 union_s_0 12 _s_0 \"\"\n" +
|
||||
" 0 union_s_1 1 _s_1 \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 12 Actual Alignment = 4\n" +
|
||||
"/union/union_s_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure union_s_0 {\n" +
|
||||
" 0 int 4 a \"\"\n" +
|
||||
" 4 int 4 b \"\"\n" +
|
||||
|
@ -421,7 +421,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 12 Actual Alignment = 4\n" +
|
||||
"/union/union_s_1\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure union_s_1 {\n" +
|
||||
" char[0] 0 f \"\"\n" +
|
||||
"}\n" +
|
||||
|
@ -449,21 +449,21 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/union\n" +
|
||||
"Unaligned\n" +
|
||||
"pack(disabled)\n" +
|
||||
"Union union {\n" +
|
||||
" 0 union_s_0 1 _s_0 \"\"\n" +
|
||||
" 0 union_s_1 2 _s_1 \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 2 Actual Alignment = 1\n" +
|
||||
"/union/union_s_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure union_s_0 {\n" +
|
||||
" 0 char 1 a \"\"\n" +
|
||||
" char[0] 0 flex \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/union/union_s_1\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure union_s_1 {\n" +
|
||||
" 0 char 1 b \"\"\n" +
|
||||
" 1 char 1 c \"\"\n" +
|
||||
|
@ -506,21 +506,21 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/struct\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure struct {\n" +
|
||||
" 0 struct_u_0 1 null \"\"\n" +
|
||||
" 8 struct_u_8 8 null \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 16 Actual Alignment = 8\n" +
|
||||
"/struct/struct_u_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union struct_u_0 {\n" +
|
||||
" 0 struct_u_0_s_0 1 _s_0 \"\"\n" +
|
||||
" 0 struct_u_0_s_1 1 _s_1 \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/struct/struct_u_0/struct_u_0_s_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure struct_u_0_s_0 {\n" +
|
||||
" 0 char:1(0) 1 s0 \"\"\n" +
|
||||
" 0 char:1(1) 1 s1 \"\"\n" +
|
||||
|
@ -533,7 +533,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/struct/struct_u_0/struct_u_0_s_1\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure struct_u_0_s_1 {\n" +
|
||||
" 0 uchar:1(0) 1 u0 \"\"\n" +
|
||||
" 0 uchar:1(1) 1 u1 \"\"\n" +
|
||||
|
@ -546,7 +546,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/struct/struct_u_8\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union struct_u_8 {\n" +
|
||||
" 0 ulong 4 a \"\"\n" +
|
||||
" 0 longlong 8 b \"\"\n" +
|
||||
|
@ -590,7 +590,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/union\n" +
|
||||
"Unaligned\n" +
|
||||
"pack(disabled)\n" +
|
||||
"Union union {\n" +
|
||||
" 0 ulong 4 a \"\"\n" +
|
||||
" 0 longlong 8 b \"\"\n" +
|
||||
|
@ -598,7 +598,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 8 Actual Alignment = 1\n" +
|
||||
"/union/union_s_2\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure union_s_2 {\n" +
|
||||
" 0 char:1(0) 1 s0 \"\"\n" +
|
||||
" 0 char:1(1) 1 s1 \"\"\n" +
|
||||
|
@ -700,7 +700,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
//@formatter:off
|
||||
CompositeTestUtils.assertExpectedComposite(this,
|
||||
"/MoreComplicated_s\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s {\n" +
|
||||
" 0 MoreComplicated_s_u_0 1 null \"\"\n" +
|
||||
" 8 MoreComplicated_s_u_8 8 null \"\"\n" +
|
||||
|
@ -710,14 +710,14 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 56 Actual Alignment = 8\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union MoreComplicated_s_u_0 {\n" +
|
||||
" 0 MoreComplicated_s_u_0_s_0 1 _s_0 \"\"\n" +
|
||||
" 0 MoreComplicated_s_u_0_s_1 1 _s_1 \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_0/MoreComplicated_s_u_0_s_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s_u_0_s_0 {\n" +
|
||||
" 0 char:1(0) 1 s0 \"\"\n" +
|
||||
" 0 char:1(1) 1 s1 \"\"\n" +
|
||||
|
@ -730,7 +730,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_0/MoreComplicated_s_u_0_s_1\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s_u_0_s_1 {\n" +
|
||||
" 0 uchar:1(0) 1 u0 \"\"\n" +
|
||||
" 0 uchar:1(1) 1 u1 \"\"\n" +
|
||||
|
@ -743,35 +743,35 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_16\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union MoreComplicated_s_u_16 {\n" +
|
||||
" 0 MoreComplicated_s_u_16_s_0 16 _s_0 \"\"\n" +
|
||||
" 0 MoreComplicated_s_u_16_s_1 16 _s_1 \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 16 Actual Alignment = 8\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_16/MoreComplicated_s_u_16_s_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s_u_16_s_0 {\n" +
|
||||
" 0 double 8 da \"\"\n" +
|
||||
" 8 char[8] 8 ca \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 16 Actual Alignment = 8\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_16/MoreComplicated_s_u_16_s_1\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s_u_16_s_1 {\n" +
|
||||
" 0 char[8] 8 cb \"\"\n" +
|
||||
" 8 double 8 db \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 16 Actual Alignment = 8\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_44\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union MoreComplicated_s_u_44 {\n" +
|
||||
" 0 MoreComplicated_s_u_44_s_0 12 _s_0 \"\"\n" +
|
||||
" 0 MoreComplicated_s_u_44_s_1 1 _s_1 \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 12 Actual Alignment = 4\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_44/MoreComplicated_s_u_44_s_0\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s_u_44_s_0 {\n" +
|
||||
" 0 int 4 fromAddress \"\"\n" +
|
||||
" 4 int 4 toAddress \"\"\n" +
|
||||
|
@ -780,13 +780,13 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 12 Actual Alignment = 4\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_44/MoreComplicated_s_u_44_s_1\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s_u_44_s_1 {\n" +
|
||||
" char[0] 0 buf \"\"\n" +
|
||||
"}\n" +
|
||||
"Size = 1 Actual Alignment = 1\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_8\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Union MoreComplicated_s_u_8 {\n" +
|
||||
" 0 ulong 4 val \"\"\n" +
|
||||
" 0 double 8 d \"\"\n" +
|
||||
|
@ -796,7 +796,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 8 Actual Alignment = 8\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_8/MoreComplicated_s_u_8_s_2\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s_u_8_s_2 {\n" +
|
||||
" 0 ulong:4(0) 1 n0 \"\"\n" +
|
||||
" 0 ulong:4(4) 1 n1 \"\"\n" +
|
||||
|
@ -817,7 +817,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 8 Actual Alignment = 4\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_8/MoreComplicated_s_u_8_s_3\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s_u_8_s_3 {\n" +
|
||||
" 0 ulong:1(0) 1 x1 \"\"\n" +
|
||||
" 0 ulong:2(1) 1 x2 \"\"\n" +
|
||||
|
@ -832,7 +832,7 @@ public class CompositeMemberTest extends AbstractGhidraHeadlessIntegrationTest
|
|||
"}\n" +
|
||||
"Size = 8 Actual Alignment = 4\n" +
|
||||
"/MoreComplicated_s/MoreComplicated_s_u_8/MoreComplicated_s_u_8_s_4\n" +
|
||||
"Aligned\n" +
|
||||
"pack()\n" +
|
||||
"Structure MoreComplicated_s_u_8_s_4 {\n" +
|
||||
" 0 uchar:1(0) 1 y1 \"\"\n" +
|
||||
" 0 uchar:2(1) 1 y2 \"\"\n" +
|
||||
|
|
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue