怎样将一个二进制文件编译为代码

怎样将一个二进制文件编译为代码,第1张

首先,将二进制文件转换为可读的源代码。这一步通常使用反汇编器来完成,它可以将二进制文件转换为汇编代码,其中包含指令、数据和其他信息。

然后,将汇编代码编译为机器语言代码,这一步使用汇编器来完成。最后,将机器语言代码编译为目标代码,这一步使用编译器来完成。

首先要清楚文件里, 储存的数据的类型,是int,long,long long 还是 float,double其次文件有无字节序(大小端)问题这两个问题解决了直接按照数据类型定义一个定长数据,或者数组一次性读入,或者分批读入全部文件。需要的话,读取以后,先转换一下字节顺序fopen,二进制读方式,打开文件,fread 读取文件,fclose 关闭文件然后 转换成十进制 ACII格式的数据,输出到文本文件中去。 fopen,文本写方式,打开文件,fprintf 写入文件,fclose 关闭文件。基本上就可以了具体可以了解一下 fopen,fread,fwrie,fclose , fprintf ,fscanf 这些C流式文件读写,打开,关闭函数

最近在写 Lua 脚本,需要读取二进制文件并转化为十六进制的字符串,C语言读文件,返回的是字符串类型,Lua 返回的也是字符串类型(用的时候忘记去查类型了,导致这个地方浪费了很长的时间。。。),由于找解决方法找了蛮长时间的,所有在这里先记录一下。 local function readAll(filePath) -- local f = assert(io.open(filePath, "rb")) local content = f:read("*all") f:close() return content end local function bytesToHexStr(filePath) -- local content = readAll(filePath) local result = "" local len = string.len(content) for i = 1, len do local charcode = tonumber(string.byte(content, i, i)) local hexstr = string.format("%02X", charcode) result = result .. hexstr end return result end 有一个小问题,顺便记录一下,在读取了二进制文件后,本想用print打印看看内容有没有被读出来,结果只打印了一部分,用 notepad++ 打开发现,文件有很多 NUL 的字符,原因是 print 在遇到 NUL 就结束打印了,囧o(╯□╰)o 十六进制转二进制可以参考这个: Lua小程序:十六进制字符串和二进制数据间的转换


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

原文地址: http://outofmemory.cn/tougao/6039210.html

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

发表评论

登录后才能评论

评论列表(0条)

保存