反汇编中的硬编码地址

hardcoded address in disassembly

我正在用 C++ 编写优化的基于 Windows 的 shellcode,但在将其传递给函数时我无法避免使用 C++ 中的硬编码地址。

例如:

My_CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)&thread_callback, NULL, NULL, NULL);

DWORD WINAPI thread_callback(LPVOID lpParam)
{
    // stuff..
}

在反汇编中,它显示 CreateThread(..., cardcoded_address, ..); 相反,我想像 "from this location to thread_callback"

这样传递这个地址

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

此致。

无论如何,我 searching/doing 一些东西,我能做的最后一件事是你可以用增量偏移来解决这个问题。

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

DWORD delta;

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

您还可以 google 获取增量偏移量以获取更多详细信息。 之后,你可以这样做:

My_CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)((DWORD)thread_callback + (DWORD)delta), NULL, NULL, NULL);

DWORD WINAPI thread_callback(LPVOID lpParam)
{
    // stuff..
}

它会正常工作,

此致。