(object: Il2Cpp.Object, field: Il2Cpp.Field)
| 110 | } |
| 111 | |
| 112 | function readFieldRow(object: Il2Cpp.Object, field: Il2Cpp.Field): FieldRow { |
| 113 | const offset = `+0x${field.offset.toString(16).padStart(4, "0")}`; |
| 114 | const pointer = object.handle.add(field.offset); |
| 115 | const typeName = safeFieldType(field); |
| 116 | const name = safeFieldName(field); |
| 117 | |
| 118 | try { |
| 119 | const value = (field as BindableField).bind(object).value; |
| 120 | return { offset, pointer, typeName, name, value: formatFieldValue(value), failed: false }; |
| 121 | } catch (error) { |
| 122 | const errorText = String(error); |
| 123 | if (errorText.includes("access violation accessing 0x0")) { |
| 124 | return { offset, pointer, typeName, name, value: colorize("null", "gray"), failed: false }; |
| 125 | } |
| 126 | |
| 127 | return { offset, pointer, typeName, name, value: `<read failed: ${errorText}>`, failed: true }; |
| 128 | } |
| 129 | } |
| 130 | |
| 131 | function logFieldRow(row: FieldRow, widths: ColumnWidths): void { |
| 132 | const line = [ |
no test coverage detected