我正在尝试为iOS创建一个文件管理器(我的代码内置了一个漏洞,因此它可以工作)。
我的应用程序的主要代码是用Swift编写的,运行漏洞利用和读取文件的代码是用Objecive-C编写的。
这是我目前在Objective-C中使用的代码:
NSString* readFile(NSString* file) {
char* buffer;
long lSize;
char* convertedFileName = [file UTF8String];
char* newFileName = deleteLastChar(convertedFileName); >> removes last / from path
char ch;
FILE *fp=fopen(newFileName, "r");
fseek( fp , 0L , SEEK_END);
lSize = ftell( fp );
rewind( fp );
buffer = calloc( 1, lSize+1 );
if( !buffer ) fclose(fp),fputs("memory alloc fails",stderr),exit(1);
if( 1!=fread( buffer , lSize, 1 , fp) )
fclose(fp),free(buffer),fputs("entire read fails",stderr),exit(1);
printf(buffer);
fclose(fp);
return [[NSString alloc] initWithUTF8String:buffer];
}
这是Swift的代码:
func openFile(file: String) {
let fileContents = readFile(file)
print(fileContents) >> outputs nil
}
这是我尝试打开的文件(plist文件)的示例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>canvas_height</key>
<integer>1136</integer>
<key>canvas_width</key>
<integer>640</integer>
</dict>
</plist>
这就是Objective-C代码中的printf返回的内容:
bplist00\322]canvas_height\canvas_width\240\332
(+
Swift说字符串是nil
正在读取文件,但仍有问题。关于如何解决这个或更好的方法处理这个的任何想法?