日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

qnx efs文件系统binary修复

發(fā)布時間:2025/3/19 windows 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 qnx efs文件系统binary修复 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從spi flash從dump了qnx的固件。進一步提取出efs文件系統(tǒng)

但是使用qnx dumpefs命令導出文件系統(tǒng)時發(fā)現結構體異常。

谷歌到了類似問題患者

http://www.openqnx.com/phpbbforum/viewtopic.php?t=3620


H[01] L[FFFF] P[00]
.status=EE8E (WRITE|NO_NEXT|NO_SUPER|NO_SPLIT|BAD|LAST|DIR|BASIC)
.reserve=B2
.text_offset_hi=6C
.text_offset_lo=0018
(text_offset=01B00060)
.text_size=0003
dirent
.status=0200 (STAT)
.struct_size=0000
.first
..logi_unit=0002 ..index=0000
.moves=BA
.namelen=00
.reserve=0073
name="pt?"
stat
.status=FE70 (COMP)
.struct_size=0006
.uid=0000000C
.gid=0006FE0C
.mtime=00402CE6 Wed Feb 18 17:16:38 1970
.ctime=00000003 Thu Jan 1 01:00:03 1970
.mode=FFFFFFFC ?rwsrwsr-T


經過winhex分析,是由于塊底的描述信息有誤。

具體原因就是 text_offset_hi?text_offset_lo的字段的值,系數不一致導致的

dumpefs的系數是4,而文件binary的系數是64,差了16倍導致的。

由于沒找到怎么使用dumpefs修正這個系數

因此寫了一段程序修復這個錯誤

塊底部的描述信息,由winhex+dumpefs信息分析而來。


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>


void fixhdr(char *sector)
{
? ? unsigned char *hdr;


? ? for(hdr = (unsigned char *)sector + 0x10000 - 0x20; hdr > sector ; hdr -= 0x20)
? ? {
? ? ? ? unsigned char hi;
? ? ? ? unsigned short lo;
? ? ? ? int off, fixoff;


? ? ? ? if(hdr[0] == 0xFF && hdr[1] == 0xFF)
? ? ? ? ? ? break;


? ? ? ? hi = hdr[0x13];
? ? ? ? lo = *(unsigned short *)&hdr[0x14];
? ? ? ? off = ((int)hi << 16) | lo;


? ? ? ? fixoff = off * 16;
? ? ? ? lo = fixoff & 0xFFFF;
? ? ? ? hi = fixoff >> 16;
? ? ? ? hdr[0x13] = hi;
? ? ? ? *(unsigned short *)&hdr[0x14] = lo;
? ? ? ? printf("fix %06x -> %06x\n", off, fixoff);
? ? }
}


int main(int argc, char *argv[])
{
? ? FILE *fin, *fout;
? ? char *buf;


? ? if(argc != 3)
? ? {
? ? ? ? printf("efsfix [src] [dst]\r\n");
? ? ? ? exit(0);
? ? }


? ? fin = fopen(argv[1], "rb");
? ? if(!fin)
? ? {
? ? ? ? printf("fopen %s failed\n", argv[1]);
? ? ? ? exit(0);
? ? }
? ? fout = fopen(argv[2], "wb");
? ? if(!fin)
? ? {
? ? ? ? printf("fopen %s failed\n", argv[1]);
? ? ? ? exit(0);
? ? }


? ? buf = malloc(0x10000);
? ? if(!buf)
? ? {
? ? ? ? printf("malloc failed\n");
? ? ? ? exit(0);
? ? }


? ? while(1)
? ? {
? ? ? ? int ret;


? ? ? ? printf("read sector...\n");
? ? ? ? ret = fread(buf, 1, 0x10000, fin);
? ? ? ? if(ret != 0x10000)
? ? ? ? {
? ? ? ? ? ? printf("fread %d exit\n", ret);
? ? ? ? ? ? break;
? ? ? ? }


? ? ? ? fixhdr(buf);


? ? ? ? printf("write sector...\n");
? ? ? ? fwrite(buf, 1, 0x10000, fout);
? ? }




? ? free(buf);
? ? fclose(fin);
? ? fclose(fout);
}


修復后仍然無法正常dumpefs

這種現象形成的原因可能是 64byte alignment ECC。

總結

以上是生活随笔為你收集整理的qnx efs文件系统binary修复的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。