Hexdump 使用 c lseek() 读取偏移量
Hexdump read offset with c lseek()
我得到了一个图像文件 img.jpg 并执行了以下操作
strings img.jpg | hexdump -C
which gave me this output
现在我需要使用带有 open、lseek 和 read 的 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
- 这就是您需要的地址。其内容在 Hexa 中为 32
或在文本中为 2
。
在每一行中,地址都是这样 - 因为该行以 0x40
:
开头
0x40 0x41 0x42 ... 0x48 0x49 0x4A 0x4B ... 0x4F
。然后开始下一行。
文件中的列是:
- 左栏 - 行中的第一个地址。
- 中间一栏 - Hexa 中每个地址的内容。
- 右栏 - 文本表示中每个地址的内容。
您当然应该检查每个 JPG 文件的偏移量是否正确。
添加:运行 hexdump -C
在 strings img.jpg
上执行时和在 img.jpg
上执行时会给出不同的结果。如果您要在 文件 中搜索特定数据,您应该检查 cat img.jpg | hexdump -C
。 那里 的偏移量将适合 fopen
文件的结果,然后 lseek
在其中。
我得到了一个图像文件 img.jpg 并执行了以下操作
strings img.jpg | hexdump -C
which gave me this output
现在我需要使用带有 open、lseek 和 read 的 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
- 这就是您需要的地址。其内容在 Hexa 中为 32
或在文本中为 2
。
在每一行中,地址都是这样 - 因为该行以 0x40
:
0x40 0x41 0x42 ... 0x48 0x49 0x4A 0x4B ... 0x4F
。然后开始下一行。
文件中的列是:
- 左栏 - 行中的第一个地址。
- 中间一栏 - Hexa 中每个地址的内容。
- 右栏 - 文本表示中每个地址的内容。
您当然应该检查每个 JPG 文件的偏移量是否正确。
添加:运行 hexdump -C
在 strings img.jpg
上执行时和在 img.jpg
上执行时会给出不同的结果。如果您要在 文件 中搜索特定数据,您应该检查 cat img.jpg | hexdump -C
。 那里 的偏移量将适合 fopen
文件的结果,然后 lseek
在其中。