怎么从可执行文件中导出音乐?

怎么从可执行文件中导出音乐?,第1张

8月23日 16:19 .com文件就是只含一个代码段的指令程序

.exe文件可包含多个程序段,如:代码段,数据段,堆栈段等

.com文件只能作一些简单的DOS指唯顷前令 *** 作

.exe文件应用广泛,可作为各类程序的程序文件

.com文件大小不能超过64K

.exe文件大小没有限制

com文件. com文件是内存中数据的镜像, 在装载过程中 *** 作系统将分配一个64Kb的段(segment)

给它, 然后将PSP(程序段前缀, program segment prefix)结构的256个字节填充乎亩完毕,

再指清将文件读入0x100偏移地址处, 再设置所有的段寄存器到该段, 即SS DS ES与CS同.

在设置IP=0x100, 然后将控制权交给com文件.

一个com文件一般是由一条跳转指令(jmp xxyy, 指令码 E9 yy xx) 或是CALL指令(E8)开始的.

由于段的限制, com文件实际大小不超过 64K-256=65280个字节.

exe文件. exe文件是有格式的, 通常的exe文件都是以MZ或ZM为文件开头的.

最开始的0x20个字节是文件头的结构, 包括文件大小, 运行所需的空间, 程序开始指针(CS:IP),

重载定位表(Relocation Table)项数, 等等信息, 根据文件头的不同,

后续的内容可能会有所变化. 并且根据exe格式是MZ(DOS下的), NE(windows 3.1的),

LE(vxd等驱动程序)或PE(Win32)的不同, 文件结构又不相同.

总的来说, exe文件是以page为单位的, 一个page为16字节, 载入内存中的时候

将对exe进行重载定位, 一个exe程序的数据段和程序段是分开的, 并且可以有多个

不同的数据段, 程序段和堆栈段, 程序占有的内存空间也超过64K的限制.

该回答在8月23日 16:21由回答者修改过

/Zm指定编译器在编译时使用的堆空间。下面的情况可能需要消耗更多的编译器堆内存:

1、包含了很多携李唤的头文件;

2、包含了过多的变量声明;

3、包含了过大的数组。

最常发生的情况是3,即程序中定义了一个很大的数组。估计一下数组的大小,参考下面列举的msdn资料,大致可以知道参数应该设为多少。

回答补充:

根据实际情况适当加大就扰裤可以,实在是内存紧张,可以采取二分法(找到一个满足要求的值和不满足要求的值,然后不断取中间值尝试),尽量接近实际要求的值即可。这个值不需要太精确,因为代码仍有可能改动,如果每次添加个数组什么的就要改动这个值辩凯就不划算了。

R='J:\B\za\rain.txt'//文件名

fid=fopen(R,'r')//打开文件

Sta=fscanf(fid,'%s\n',1)//把目标文件内铅李容第一个字符按'%s\n'格式存入Sta中

nn=fscanf(fid,'%d\n',1)//第二个字符按'%d\n'存入nn中,估计是数据槐清迟长度

//估计以上是文件头信息

for i=1:nn //主要数据读入

sta(i).s=fscanf(fid,'%s',1)

zm(i).s=fscanf(fid,'%s\n',1)//之所以要加\n 是想存成列向量,下同

mm(i)=fscanf(fid,'%d\n',1)//像是Y(i).y的长度

Y(i).y=fscanf(fid,'正亮%f\n',mm(i))//此处mm(i)是一次存的数据长度

end

fclose(fid)//关文件

display('No. of Stations =')//显示此字符串

disp(nn)//显示数据总长度

n0=1//不知道是什么,没用到

没有文件格式,只有猜了


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/8172192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存