gpt4 book ai didi

android - 如何使用JNI在Android中读取/写入文件slacks?

转载 作者:行者123 更新时间:2023-11-30 17:06:22 24 4
gpt4 key购买 nike

我正在构建一个取证工具,它将从文件 slacks 中读取和写入。目前,我使用 JNI 调用 C 函数 read()write() 将缓冲区写入 FAT SD 卡(EXT4 内部存储器也很好) 。我使用它们是因为您可以传递长度来读/写,从而忽略 EOF。我已经尝试使用标准写入进行写入,然后截断它以便写入文件 slack,该文件适用于 ubuntu 14.04,但不适用于 Android (API 21)。从文件中读取的内容多于实际文件大小并不反射(reflect) SD 卡上的空闲时间。有一些工具,例如管理访问文件 slacks 的“bmap”或“slacker.exe”(对于 NTFS)。我需要一种方法来忽略 EOF 或自己处理它。我不想更改现有的文件系统驱动程序。我很感激任何建议。

这里是一些示例代码(尚未运行):

jstring
Java_com_example_hellojni_HelloJni_write(JNIEnv *env, jobject thiz, jstring path)
{
char *cpath = (*env)->GetStringUTFChars(env, path, NULL);
int raw_file_descriptor = open(cpath,O_WRONLY,0);
lseek(raw_file_descriptor,0,SEEK_END);
char block_buffer [4096] = "hidden";
int buffer_length = 6;
int wret = write(raw_file_descriptor,block_buffer,buffer_length); // increases file size and moves EOF - I don't want that
LOGD(" char written: %d", wret);
free(cpath);
return (*env)->NewStringUTF(env, "write ok ");
}

jbyteArray
Java_com_example_hellojni_HelloJni_read2(JNIEnv *env, jobject thiz, jstring path) {

char *cpath = (*env)->GetStringUTFChars(env, path, NULL);
LOGD("open %s with ", cpath);
int raw_file_descriptor = open(cpath,O_RDONLY,0);
char buffer [4096];
int readretval = read(raw_file_descriptor, buffer, 50); // stops at EOF - I want it to continue reading all 50 bytes from the SD-card - This gives me the file content until EOF and then I get some random characters from the uninitialized buffer.
LOGD("read (%d) buffer with length %d: %s", readretval, sizeof(buffer), buffer);
int i; // Debug code
for (i=0; i < 49; ++i) {
LOGD("%c",buffer[i]);
}

close(raw_file_descriptor);
free(cpath);
return NULL;
}

最佳答案

显然这种方法是不可能的。但对于 root 来说,可以通过安装环回设备来写入文件 slack。尽管如此,在不更改驱动程序或实现您自己的内核模块的情况下,忽略 EOF 是不可能的。

关于android - 如何使用JNI在Android中读取/写入文件slacks?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34764263/

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