feat: 优化和增加TODO

This commit is contained in:
2024-12-11 11:25:00 +08:00
parent 45148ead6e
commit 90e3e22e44
5 changed files with 78 additions and 14 deletions

View File

@@ -3,6 +3,7 @@ import NodeTableComponent, {
} from "../NodeTableComponent/NodeTableComponent";
export default function NTHeader() {
// TODO: 这里要分64位和32位最好让后端返回
const dataTemplate: DataTemplateInterface = {
signature: {
name: "Signature",

View File

@@ -35,7 +35,8 @@ export interface DataType {
// hex: 16进制
// enum: 枚举值,对于枚举的处理一律按位处理
// array: 数组
data_type: "hex" | "enum" | "array";
// char_array: 字符数组
data_type: "hex" | "enum" | "array"| "char_array";
children?: DataType[];
}
@@ -87,6 +88,7 @@ const EditableCell: React.FC<React.PropsWithChildren<EditableCellProps>> = ({
handleSave,
...restProps
}) => {
// TODO: 如果值现在以16进制显示那么编辑的时候也应该是16进制
const [editing, setEditing] = useState(false);
const inputRef = useRef<InputRef>(null);
const form = useContext(EditableContext)!;
@@ -145,10 +147,8 @@ export default function NodeTableComponent(props: NodeTableComponentProps) {
}>({});
const handleSwitchFieldHexMode = (field: string) => {
console.log("hexSwitchStatus", hexSwitchStatus);
const newHexSwitchStatus = { ...hexSwitchStatus };
newHexSwitchStatus[field] = !newHexSwitchStatus[field];
console.log("newHexSwitchStatus", newHexSwitchStatus);
setHexSwitchStatus(newHexSwitchStatus);
};
@@ -224,13 +224,13 @@ export default function NodeTableComponent(props: NodeTableComponentProps) {
cloneData[key].value = null;
cloneData[key].children = array;
}
// TODO: 枚举值处理
if(cloneData[key].data_type === "enum") {
// TODO: 枚举值处理, 把所有枚举放到一个成员,后面通过选项组件展示
if (cloneData[key].data_type === "enum") {
// children
let children = [];
let value = resData.fields[key];
for (let enumValue in cloneData[key].enum) {
if((value as number) & parseInt(enumValue)) {
if ((value as number) & parseInt(enumValue)) {
children.push({
offset: cloneData[key].offset,
name: cloneData[key].enum[enumValue].enum_name,
@@ -241,19 +241,23 @@ export default function NodeTableComponent(props: NodeTableComponentProps) {
});
}
}
// cloneData[key].value = null;
cloneData[key].children = children;
}
}
// TODO: 字符数组处理
// 3. 更新data
setData(Object.values(cloneData).sort((a, b) => a.offset - b.offset));
}
// TODO: 应该从columns中获需要排序的字段来进行排序
// 如果cloneData的成员中有offset字段那么需要按照offset排序
let cloneDataArray = Object.values(cloneData);
if(cloneDataArray[0].offset){
cloneDataArray.sort((a, b) => a.offset - b.offset);
}
setData(cloneDataArray);
};
useEffect(() => {
// 请求数据
invoke(props.command).then((resData: ResponsData) => {
console.log("resData", resData);
handleData(resData);
});
}, []);

View File

@@ -0,0 +1,62 @@
import NodeTableComponent, {
DataTemplateInterface,
} from "../NodeTableComponent/NodeTableComponent";
export default function SectionHeaders() {
const dataTemplate: DataTemplateInterface = {
/**
pub name: [u8; 8],
pub virtual_size: u32,
pub virtual_address: u32,
pub size_of_raw_data: u32,
pub pointer_to_raw_data: u32,
pub pointer_to_relocations: u32,
pub pointer_to_linenumbers: u32,
pub number_of_relocations: u16,
pub number_of_linenumbers: u16,
pub characteristics: SectionCharacteristics,
*/
};
const command = "command_get_pe_data_optional_header";
const columns = [
{
title: "节区名(Byte[8])",
dataIndex: "name",
key: "name",
},
{
title: "虚拟大小",
dataIndex: "offset",
key: "offset",
hexSwitch: true,
},
{
title: "大小",
dataIndex: "size",
key: "size",
},
{
title: "值",
dataIndex: "value",
key: "value",
hexSwitch: true,
editable: true,
},
{
title: "描述信息",
dataIndex: "description",
key: "description",
},
];
return (
<NodeTableComponent
dataTemplate={dataTemplate}
command={command}
columns={columns as any}
></NodeTableComponent>
);
}