反汇编中的硬编码地址



我正在用C++编写优化的基于Windows的外壳代码,在将其传递给函数时,我遇到了在C++中避免硬编码地址的问题。

例如:

My_CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)&thread_callback, NULL, NULL, NULL);
DWORD WINAPI thread_callback(LPVOID lpParam)
{
    // stuff..
}

在反汇编中,它显示CreateThread(…,cardcoded_address,..);相反,我想像"从这个位置到线程回调"一样传递这个地址

有什么办法可以避免吗?(因为外壳代码应该与地址无关?)

谨致问候。

无论如何,我一直在搜索/做一些事情,我能做的最后一件事是,你可以用delta偏移量来解决这个问题。

说明:在代码的第一个函数处,应该有这样的函数:

DWORD delta;
__asm {
    call GetBasePointer
    GetBasePointer:
    pop eax
    sub eax, GetBasePointer
    mov [delta], eax
}

您也可以在谷歌上搜索delta偏移量以获取更多详细信息。之后,你可以做这样的事情:

My_CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)((DWORD)thread_callback + (DWORD)delta), NULL, NULL, NULL);
DWORD WINAPI thread_callback(LPVOID lpParam)
{
    // stuff..
}

它会很好地工作,

谨致问候。

最新更新