DWORD WINAPI getOffset(uintptr_t BaseAddy, uintptr_t endAddy, byte aob[], int bytessize, LPVOID returnValue)
{
MessageBox(NULL, "321", "123", MB_OK);
return 0;
}
Вызываю:
CreateThread(NULL, NULL, reinterpret_cast<LPTHREAD_START_ROUTINE>(getOffset(BaseAddy + 0xd7d000, endAddy, presentAOB, 11, &presentOffset)), NULL, NULL, NULL);
Происходит краш программы сразу после MessageBox (на самом return 0). В чем может быть проблема и как ее исправить?
Ваша функция getOffset возвращает 0, который вы переинтерпретируете в null-указатель и передаете в качестве указателя на функцию потока. Разумеется, все падает.
Функция потока не может быть null-указателем.
Если ваша задача состоит в том, чтобы вызвать вашу функцию из потока с вышеприведенными параметрами, то делать вам это придется следующим образом
Написать функцию потока, из которой будет делаться вызов getOffset
DWORD myThreadFunction(LPVOID p)
{
...
getOffset(...);
return 0;
}
Подготовить структуру для передачи ваших параметров в поток, заполнить ее и передать указатель на нее в CreateThread вместе с указателем на функцию потока
struct MyThreadParams
{
uintptr_t BaseAddy, endAddy;
byte *aob;
int bytessize;
LPVOID returnValue;
};
...
MyThreadParams params =
{ BaseAddy + 0xd7d000, endAddy, presentAOB, 11, &presentOffset };
CreateThread(NULL, 0, myThreadFunction, ¶ms, 0, NULL);
В функции потока получить этот указатель на структуру и использовать ее поля как аргументы для вызова вашей функции getOffset
DWORD myThreadFunction(LPVOID p)
{
MyThreadParams *params = (MyThreadParams *) params;
getOffset(params->BaseAddy, params->endAddy, params->aob, params->bytessize,
params->returnValue);
return 0;
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости