gpt4 book ai didi

c - 在知道内存偏移量和字符串长度的文件中查找十六进制字符串

转载 作者:行者123 更新时间:2023-11-30 18:04:57 25 4
gpt4 key购买 nike

早上好,stackoverflow!

我正在尝试从二进制文件中提取十六进制字符串。我无法直接找到这个字符串,但我知道该字符串的长度为 0x30,并且在已知的十六进制字符串之后从 0x10 开始。

这是我的代码

 FILE *f = NULL;
unsigned char *buffer = NULL;
unsigned long fileLen;

unsigned char known_string[] = {0x45, 0x45, 0x45, 0x45};


printf("Opening file...\n");
f = fopen(argv[1], "rb");

if (!f) {
fprintf(stderr, "Unable to open %s\n", argv[1]);
return -1;
}

// Get the length
fseek(f, 0, SEEK_END);
fileLen=ftell(f);

fseek(f, 0, SEEK_SET);

// Allocate memory
buffer=malloc(fileLen);

if (!buffer)
{
fprintf(stderr, "Memory error!\n");
fclose(f);
return -1;
}

// File to buffer

fread(buffer, fileLen, 1, f);
fclose(f);

printf("Buffer starts: %p\n", &buffer[0]);
printf("Buffer ends: %p\n", &buffer[fileLen]);

// Determines offset of known_string

char *p = memmem(buffer, fileLen, bytes, 4);
if (!p) {
return -1;
} else {

printf(" General offset: %x\n", p);
}

free(buffer);

所以我得到了已知字符串的一般偏移量,但我需要获取相对于文件的偏移量。我在这一步有点卡住了。我想我必须做类似 p - &buffer[0] 的事情,但是 p 和 &buffer[0] 不是同一类型,而且 p 甚至不是真正的偏移量(例如 678987 而不是 10678987)。那么如果我得到了相对偏移量,我怎样才能找到未知的字符串呢?

最佳答案

由于您只对指针地址感兴趣,而不是它指向的数据,因此您也可以使用 void *,并且不必执行 &buffer[0],它不是数组。

unsigned long off_to_string = 0x10 + 4 + ((void *)p) - ((void *)buffer);

我添加 0x10 + 4 以跳过找到的十六进制字节序列以及搜索字符串之前的字节。

关于c - 在知道内存偏移量和字符串长度的文件中查找十六进制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7203255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com