Получение размера функция C ++

Если Вы знаете шаблоны, то они становятся инструментами на Вашей панели инструментов. При рассмотрении задачи Вы выбираете из своих инструментов. В той точке у Вас должна быть довольно хорошая идея, какой инструмент является лучшим пригодным для данной проблемы. Это - то, где формулы прекращают работать, и Вы на самом деле делаете инженерные работы.

22
задан Community 23 May 2017 в 12:26
поделиться

3 ответа

ниже приведен код для получения точного размера функционального блока, он отлично работает с моим тестом runtime_checks отключить _RTC_CheckEsp в режиме отладки

    #pragma runtime_checks("", off)
DWORD __stdcall loadDll(char* pDllFullPath)
{  
    OutputDebugStringA(pDllFullPath);
    //OutputDebugStringA("loadDll...................\r\n");
    return 0;
    //return test(pDllFullPath);
}
#pragma runtime_checks("", restore)

DWORD __stdcall getFuncSize_loadDll()
{
    DWORD maxSize=(PBYTE)getFuncSize_loadDll-(PBYTE)loadDll;
    PBYTE pTail=(PBYTE)getFuncSize_loadDll-1;
    while(*pTail != 0xC2 && *pTail != 0xC3) --pTail;
    if (*pTail==0xC2)
    {   //0xC3          : ret
        //0xC2 04 00    : ret 4
        pTail +=3;
    }

    return pTail-(PBYTE)loadDll;
};
0
ответ дан 29 November 2019 в 04:08
поделиться

Ух ты, я все время использую функцию подсчета размеров, и у нее есть множество применений. Это надежно? Ни за что. Это стандарт с ++? Ни за что. Но именно поэтому вам нужно проверить его в дизассемблере, чтобы убедиться, что он работает, каждый раз, когда вы выпускаете новую версию. Флаги компилятора могут испортить порядок.

static void funcIwantToCount()
{
   // do stuff
}
static void funcToDelimitMyOtherFunc()
{
   __asm _emit 0xCC
   __asm _emit 0xCC
   __asm _emit 0xCC
   __asm _emit 0xCC
}

int getlength( void *funcaddress )
{
   int length = 0;
   for(length = 0; *((UINT32 *)(&((unsigned char *)funcaddress)[length])) != 0xCCCCCCCC; ++length);
   return length;
}

Кажется, лучше работает со статическими функциями. Глобальные оптимизации могут убить его.

P.S. Я ненавижу людей, спрашиваю, почему вы хотите сделать это, а это невозможно и т. Д. Перестаньте задавать эти вопросы, пожалуйста. Звучит глупо. Программистов часто просят делать нестандартные вещи, потому что новые продукты почти всегда выходят за пределы того, что доступно. Если они этого не делают, ваш продукт, вероятно, переосмысление того, что уже было сделано. Скучный !!!

10
ответ дан 29 November 2019 в 04:08
поделиться

Это - старый вопрос, но все еще...

Для Windows x64, функции у всех есть функциональная таблица, которая содержит смещение и размер функции. https://docs.microsoft.com/en-us/windows/win32/debug/pe-format. Эта функциональная таблица используется для раскручивания, когда исключение выдается.

Тем не менее это не содержит информацию как встраивание и все другие проблемы, которые уже отметили люди...

0
ответ дан 29 November 2019 в 04:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: