RE — смещение функции поиска IDA

Я только начинаю с обратного проектирования.

Я создал небольшое C ++ ConsoleApplication и пытаюсь вызвать NewFunction через внедренную DLL.

void NewFunction()
{
DWORD dwImageBase = (DWORD)GetModuleHandle(NULL);

std::cout << "ImageBase: " << ToHex(dwImageBase) << std::endl;
std::cout << "NewFunction: " << ToHex((DWORD)&NewFunction) << std::endl;
std::cout << "Offset: " << ToHex((DWORD)&NewFunction - dwImageBase) << std::endl;
}

Пример вывода:

ImageBase: F90000
NewFunction: FA111D
Offset: 1111D

Теперь, когда я вызываю 0xFA111D с моей внедренной DLL, она работает как положено и печатает все заново. (DLL вызывает ImageBase + Offset)

Однако я не могу понять, как получить адрес NewFunction с помощью IDA Pro …

В МАР:

  • функция расположена по адресу: 0x4133F0
  • База изображений: 0x400000
  • Расчетное смещение: 0x133F0

Не должно ли хотя бы смещение быть таким же?
Я что-то упустил здесь?

2

Решение

Параметры по умолчанию для сборки отладки в Visual Studio включают включение инкрементное связывание. Эффект этого состоит в том, что в скомпилированном двоичном файле каждый вызов функции проходит через заглушку перехода (это позволяет компоновщику обновлять двоичный файл новым кодом без повторного выполнения шага полной ссылки).

&NewFunction возвращает адрес этой заглушки, а не фактическую реализацию функции.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]