我正在用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应该是地址独立的?)
问候。
答案 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..
}
它会正常工作,
问候。