反汇编中的硬编码地址

时间:2015-03-28 13:55:43

标签: c++ assembly shellcode

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

e.g:

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

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

在反汇编中,它显示了CreateThread(...,cardcoded_address,..); 相反,我想传递这个地址,如“从这个位置到thread_callback”

有什么办法可以避免吗? (因为shellcode应该是地址独立的?)

问候。

1 个答案:

答案 0 :(得分:0)

无论如何,我正在搜索/做一些事情,我能做的最后一件事是你可以用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..
}

它会正常工作,

问候。