Я только начинаю заниматься реверс-инжинирингом.
Я создал небольшое консольное приложение С++ и пытаюсь вызвать 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
Разве хотя бы смещение не должно быть одинаковым? Я пропустил что-то важное здесь?