如何提取sys文件的资源?我相信exe、dll和sys文件有相同的头。是这样吗?
我不明白我该怎么处理我从资源表得到的虚拟服装和尺寸。
#include <stdio.h>
#include <windows.h>
#include <string.h>
void main()
{
FILE *file = fopen( "example.sys", "r" );
IMAGE_DOS_HEADER dos_header;
IMAGE_NT_HEADERS nt_header;
IMAGE_DATA_DIRECTORY data_directory;
char *data;
if( file != NULL )
{
fseek( file, 0, SEEK_SET );
fread( &dos_header, sizeof( dos_header ), 1, file );
if( dos_header.e_magic != IMAGE_DOS_SIGNATURE )
return;
fseek( file, dos_header.e_lfanew, SEEK_SET );
fread( &nt_header, sizeof( nt_header ), 1, file );
if( nt_header.Signature != IMAGE_NT_SIGNATURE )
return;
data_directory = nt_header.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE];
data = malloc( data_directory.Size + 1 );
memset( data, 0, data_directory.Size + 1 );
fseek( file, data_directory.VirtualAddress, SEEK_SET ); // <- ????
fread( data, data_directory.Size, 1, file );
free( data );
fclose( file );
}
}
最佳答案
virtual address实际上是数据结构的相对虚拟地址(rva)。
例如,如果此结构用于导入符号,则此字段包含图像导入描述符数组的rva。
isize包含virtualaddress引用的数据结构的字节大小。
看看THIS链接。这是关于如何深入到win32程序集的一个很好的解释。
关于c - 从sys文件中提取资源,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28343400/