如何提取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/

10-09 13:35