我得到了一个图像文件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
中 - 这是您需要的地址。其内容以六32
或2
为文本。
在每一行中,地址都是这样的 - 因为该行以 0x40
开头:
0x40 0x41 0x42 ... 0x48 0x49 0x4A 0x4B ... 0x4F
.然后开始下一行。
文件中的列是:
- 左列 - 行中的第一个地址。
- 中间列 - 十六进制中每个地址的内容。
- 右列 - 文本表示中每个地址的内容。
当然,您应该检查此偏移量是否适用于每个 JPG 文件。
另外:运行hexdump -C
在strings img.jpg
上执行和在img.jpg
上执行时会给出不同的结果。如果要在文件中搜索特定数据,则应检查cat img.jpg | hexdump -C
。那里的偏移量将适合fopen
文件然后lseek