В Visual Studio скомпилированный исполняемый файл debugmode: jmp в тело функции вместо прямого адреса в вызове

представьте себе эту поддельную программу:

void foo ( void )
{
    // anything
}

int main ()
{
    foo ();
    return 0;
}

При компиляции в режиме отладки с помощью Visual Studio компилятор создает своего рода «карту функций». или как это называется.

Таким образом, когда вы, например, следуете за foo () в отладчике или просто пытаетесь получить смещение функции через & amp; foo, вы попадаете в список & quot; список & quot; из jmp 's, который, когда вы будете следовать за ними снова, приведет вас к фактическому телу функции.

Мой вопрос: Есть ли возможность отключить это для функций с одиночным выбором, чтобы & amp; foo возвращал адрес тела функции, а не jmp. Конечно без отключения режима отладки.

Если нет, то какой флаг включает / отключает это для всей программы?

Заранее спасибо !

Редактировать для пользователя SigTerm: enter image description here

 Andy02 июн. 2012 г., 05:08
Добавил картинку ... Мне жаль, что кто-то, кто успешно ответит на мой вопрос, должен знать, о чем я говорю ... В конце концов, я не знаю правильной терминологии, поэтому я здесь, а не в Google ...
 Superman02 июн. 2012 г., 05:17
Это невозможно. Это было бы слишком много для загрузчика, когда задействованы динамически загружаемые модули, когда каждый вызов функции в динамически загружаемом модуле должен был бы быть исправлен. Вместо этого удобно просто пропатчить одну инструкцию jmp в таблице адресов импорта. Это также относится к исполняемым файлам, которые не гарантированно загружаются по какому-либо конкретному адресу.
 SigTerm02 июн. 2012 г., 05:32
@ Супермен: Это не dll, это программа.
 SigTerm02 июн. 2012 г., 06:12
@Andy: & quot; Я отлаживаю функции в самом исполняемом файле, чтобы скопировать их & quot; Очень плохая идея Даже ассемблер имеет стиль кодирования, и, копируя код, сгенерированный машиной (у которого нет мозгов), вы научитесь меньше.
 SigTerm02 июн. 2012 г., 03:49
& quot; ты найдешь себя & quot; Насколько я знаю, этого не происходит, и нет «списка переходов». Если вы не можете подтвердить свою точку зрения некоторыми серьезными примерами, я должен сказать, что вы, вероятно, неправильно поняли что-то очень фундаментальное.

Ответы на вопрос(1)

Решение Вопроса

Отключите «инкрементное связывание»

Ваш вопрос очень похож на этот Адрес функции не фактический адрес кода

 Andy02 июн. 2012 г., 05:45
Спасибо, что именно то, на что я надеялся получить ответ в виде инкрементных ссылок!

Ваш ответ на вопрос