反汇编中的硬编码地址
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..
}
它会正常工作,
此致。
我正在用 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..
}
它会正常工作,
此致。