添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • Windows 无法加载这个硬件的设备驱动程序。驱动程序可能已损坏或不见了。 (代码 39)
  • C++ #if defined _WIN32、_WIN64、_ANDROID_、_APPLE_、_MACH_、linux
  • GUID大全
  • Windows映射文件ISO安装命令
  • devcon常用命令
  • 从Windows7开始,微软对Win32子系统做出重大的调整,其中表现之一就是函数集的调整。

    如我们熟知的advapi32.dll其中一部分函数移动了kernel32.dll中,另一部分包括kernel32.dll中的一些函数被移动到了KERNELBASE.dll中,并且出现了大量的新dll导入函数,这些dll的名称非常长,例如API-MS-Win-Core-LocalRegistry-L1-1-0.dll。

    而这些名称非常长的新增加函数一般不独立导入使用,而是通过ADVAPI32和KERNEL32、一般支持的dll(如MFC42、MSVCRT和OLE32)、许多服务以及各种其他可执行文件完成的。而这种情况也不光发生在应用层,它们也适用于内核模式。NT内核本身(NTOSKRNL)以前只从HAL导入,现在从ext-ms-win-ntos-ksigningpolicy-l1-1-0.dll之类的dll中导入。

    api-ms- 系列动态链接库作用

    这个函数其实是用于函数转发用的,也是为了实现API函数集的分层,实现API函数集像内存一样实现逻辑与物理的映射。
    这样做的好处就是通过这个函数转发映射,在软件开发时保留函数接口的调用的库一致,但通过不同的映射实现同一套应用接口而在不同平台的移植。

    fread函数追踪

    如我们手中一个touch.exe工程,其引入了api-ms-win-crt-stdio-l1-1-0.dll库,并导入了函数fread.

    我们通过ida打开api-ms-win-crt-stdio-l1-1-0.dll,并查看其导出函数fread,其仅定义字符串ucrtbase.fread

    .rdata:0000000180002835                 public fread
    .rdata:0000000180002835 ; size_t __cdecl fread(void *DstBuf, size_t ElementSize, size_t Count, FILE *File)
    .rdata:0000000180002835 fread           db 'ucrtbase.fread',0   ; DATA XREF: .rdata:off_180001088o
    .rdata:0000000180002844 aFread_s        db 'fread_s',0          ; DATA XREF: .rdata:off_180001304o
    

    其实这里的ucrtbase.fread的含义是将该函数转发至ucrtbase.dll的fread函数中。
    打开ucrtbase.dll,其确实导出了fread.dll函数。
    ucrtbase.freaducrtbase.fread

    Win10函数集与宿主DLL映射关系

    API Set Default Host Exceptional Mappings (Importer → Host) Remarks