当前位置 : 主页 > 编程语言 > delphi >

freepascal – Turbo Pascal中的数组内存布局

来源:互联网 收集:自由互联 发布时间:2021-06-23
我们在Turbo Pascal中有一个旧的应用程序可以将其内部状态保存到文件中,我们需要能够在C#应用程序中读/写该文件. 旧应用程序通过转储各种内存数据结构来生成文件.在一个地方,应用程
我们在Turbo Pascal中有一个旧的应用程序可以将其内部状态保存到文件中,我们需要能够在C#应用程序中读/写该文件.

旧应用程序通过转储各种内存数据结构来生成文件.在一个地方,应用程序只转储一系列内存,而这个内存范围包含一些数组.我试图找出实际数组元素之前的字节的目的.特别是,块中的前两项可以表示为:

type
  string2 = string[2];
  stringarr2 = array[0..64] of string2;
  string4 = string[4];
  stringarr4 = array[0..64] of string4;

在数据文件中,我看到以下字节序列:

25 00 02 02 41 42 02 43 44 ...

25是数组中元素的数量. 02 41 42是第一个弦元素“AB”; 02 43 44是第二个字符串元素,“CD”,依此类推.我不知道数组元素数和第一个数组元素之间的00 02是什么意思.数组元素数可能是25 00,元素大小是02,但每个数组元素的大小实际上是3个字节.

在文件中4字符字符串数组开始的位置,我看到以下内容:

25 00 04 00 00 04 41 42 43 44 04 45 46 47 48

同样,25是数组中元素的数量; 04 41 42 43 44是数组中的第一个元素“ABCD”,依此类推.在它们之间有字节00 04 00 00.也许它们是标志.也许它们是阵列形状的某种指示(但我不知道02和04如何表示一维阵列).

我无法访问Turbo Pascal尝试将不同类型的数组写入文件,并且没有授权安装像Free Pascal这样的东西,因此我沿着这些方式进行实验的机会非常有限.

这些数组不是动态的,因为Turbo Pascal没有它们.

提前感谢任何尘土飞扬的回忆.

Pascal数组没有簿记数据.你有一个五字节数据结构的数组(字符串[4]),因此其中65个数组占65 * 5 = 325字节.如果程序写的不止于此,那就是因为该程序采取了特殊措施来编写更多内容. “额外”值不只是在内存中,当程序使用SizeOf天真地编写整个数据结构时,程序碰巧写入磁盘.因此,了解这些字节意味着什么的唯一方法是找到源代码或文档.仅仅知道它是Turbo Pascal没有帮助.

文件的第一部分可能与所有其他数组元素的大小有意.对于双字符串,“标题”是三个字节,对于四个字符的字符串,“标题”是五个字节,与字符串的大小相同.这样就可以让程序为文件使用string4数据类型的文件,然后跳过文件的第一条记录.文件长度和标头中字符串长度之间的零可能属于这些字段中的任何一个,剩余的两个零字节可能只是填充符.

网友评论