жестко закодированный адрес в разборке

Я пишу оптимизированный шелл-код на основе Windows в C ++, и у меня есть проблема, избегая жестко закодированных адресов в C ++ при передаче его в функцию.

например:

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

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

при разборке показывает CreateThread (…, cardcoded_address, ..);
вместо этого я хочу передать этот адрес как «из этого места в thread_callback»

есть ли способ избежать этого? (потому что шеллкод должен быть независимым от адреса?)

С уважением.

0

Решение

В любом случае, я искал / делал кое-что, и последнее, что я мог сделать, это то, что вы можете решить это с дельта-смещением.

Объяснение: в самой первой функции вашего кода должна быть такая функция:

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..
}

и это будет работать нормально,

С уважением.

0

Другие решения


По вопросам рекламы [email protected]