代码之家  ›  专栏  ›  技术社区  ›  glodos

无法从Android设备上的FAT32 USB驱动器正确读取引导扇区

  •  0
  • glodos  · 技术社区  · 9 年前

    我正在尝试从Android设备上的FAT32驱动器读取引导扇区,但我得到的数据与我预期的完全不同。

    这是我在Android设备上的read端点上使用bulkTransfer接收的输出。

    33C08ED0BC007C8EC08ED8BE007CBF00
    06B90002FCF3A450681C06CBFBB90400
    BDBE07807E00007C0B0F850E0183C510
    ...
    656D000000637B9A5BE2B3D70000800F
    30000BFEFFF4E0030000205CF8000000
    00000000000000000000000000000000
    00000000000000000000000000000000
    000000000000000000000000000055AA
    

    这是我电脑上用十六进制查看器转储的引导扇区。

    EB58904D53444F53352E300002081004
    0200000000F800003F00FF00E0030000
    205CF800F83D00000000000002000000
    ...
    0000000000000000000000000D0A5573
    75E4206479736B69206C756220696E6E
    79206E6F986E696BFF0D0A4288A56420
    6479736B75FF0D0A5A72657374617274
    756A2C206E616369736B616AA563206B
    6C617769737A0D0A00ACC9D6000055AA
    

    我在Android上收到的数据在结尾处包含以下消息:“分区表无效。加载操作系统时出错。缺少操作系统”。

    有人能告诉我这里怎么了吗?在读取引导扇区之前,是否需要执行任何操作?

    目前,我的代码流程如下:

    1. 查找所需的USB设备
    2. 获得与USB设备通信的权限
    3. 打开设备连接
    4. 执行“测试单元就绪”命令,直到成功响应
    5. 执行“读取容量”命令-这将返回正确的结果
    6. 执行“Read 10”命令读取前512个字节-这将返回不正确的数据

    我会感谢你的任何建议

    1 回复  |  直到 9 年前
        1
  •  0
  •   Turbo J    9 年前

    哪个十六进制查看器?

    win上的非管理员用户无法访问物理设备上的分区表, 所以你通常会得到 隔断 只有你可以检查这个,它将包含 FAT32 偏移量为0x52的字符串。要阅读 真实的 分区表,您需要以管理员权限访问pysical设备。

    在android上,您读取分区表本身,因为您在低级别访问物理“磁盘”。