Hexdump read offset with c lseek()



我得到了一个图像文件img.jpg并执行以下操作

strings img.jpg | hexdump -C这给了我这个输出
现在我需要使用带有打开、搜索和读取的 c 程序获取相机和日期信息......我的问题是,如何使用 lseek 跳转到日期 2015:08:05?
我尝试使用偏移0x40但真的不知道发生了什么......

编辑:正如答案中指出的那样,2015年的2应该是2015年,但此代码不输出2而是0。

int rd = lseek(filedesc, 0x49, SEEK_SET);

    if(rd < 0){
        perror("lseek");
        close(filedesc);
        return 1;
    }   
    read(filedesc, &output, 1);
    printf("%d", output);

0x40地址表示行的开头。2015 中的2位于地址 0x49 中 - 这是您需要的地址。其内容以六322为文本。

在每一行中,地址都是这样的 - 因为该行以 0x40 开头:

0x40 0x41 0x42 ... 0x48 0x49 0x4A 0x4B ... 0x4F .然后开始下一行。

文件中的列是:

  • 左列 - 行中的第一个地址。
  • 中间列 - 十六进制中每个地址的内容。
  • 右列 - 文本表示中每个地址的内容。

当然,您应该检查此偏移量是否适用于每个 JPG 文件。

另外:运行hexdump -Cstrings img.jpg上执行和在img.jpg上执行时会给出不同的结果。如果要在文件中搜索特定数据,则应检查cat img.jpg | hexdump -C那里的偏移量将适合fopen文件然后lseek

文件的结果。

最新更新