для чего используется «disasm.cpp» в Detours? Я не понимаю объявление класса CDetourDis - PullRequest
1 голос
/ 10 июля 2019

Существует так много определений макросов, в комментарии говорится: «Эти макросы определяют общее использование nFixedSize, nFixedSize16, nModOffset, nRelOffset, nFlagBits, pfCopy». что это значит?

Я думаю, что это может быть набор инструкций процессора, поэтому я попытался найти некоторую информацию из архитектур Intel® 64 и IA-32 В Руководстве разработчика программного обеспечения я не нашел никакой информации о 0F, 0F00, 0F78, 0FB8 и т. Д.

// nFlagBits flags.
enum {
    DYNAMIC     = 0x1u,
    ADDRESS     = 0x2u,
    NOENLARGE   = 0x4u,
    RAX         = 0x8u,
};
// ModR/M Flags
enum {
    SIB         = 0x10u,             
    RIP         = 0x20u,
    NOTSIB      = 0x0fu,
};

// часть определений макросов, более подробная информация: https://github.com/microsoft/Detours/blob/master/src/disasm.cpp

#define ENTRY_CopyBytes1Address     5, 3, 0, 0, ADDRESS, &CDetourDis::CopyBytes
#define ENTRY_CopyBytes3Dynamic     3, 3, 0, 0, DYNAMIC, &CDetourDis::CopyBytes
#define ENTRY_CopyF2                ENTRY_DataIgnored &CDetourDis::CopyF2
#define ENTRY_CopyF3                ENTRY_DataIgnored &CDetourDis::CopyF3
#define ENTRY_Copy0F                ENTRY_DataIgnored &CDetourDis::Copy0F
#define ENTRY_Copy0F78              ENTRY_DataIgnored &CDetourDis::Copy0F78

Я хочу знать, что это такое и для чего используется этот disasm.cpp файл, особенно функция DetourCopyInstruction(PVOID pDst, PVOID *ppDstPool, PVOID pSrc, PVOID *ppTarget, LONG *plExtra)?

...