Гуд темка, в будущем можешь добавить спуф калл стека либо индирект вызов как
Пожалуйста, авторизуйтесь для просмотра ссылки.
чтоб прям вообще ваааай, но это больше к хакингу относится
Последнее редактирование:
спасибоГуд темка, в будущем можешь добавить спуф калл стека либо индирект вызов какПожалуйста, авторизуйтесь для просмотра ссылки.чтоб прям вообще ваааай, но это больше к хакингу относится
проверил, даже так не работает, только теперь не ERROR_ACCESS_DENIED возвращает, а 0 и поток просто не создаетсяNtCreateThreadEx( &t, THREAD_ALL_ACCESS, NULL, (HANDLE)-1, (LPTHREAD_START_ROUTINE)startroutine, nullptr, FALSE, NULL, NULL, NULL, NULL );
но я уже походу понял в чем проблема, чувак выше написал
в ObjectAttributes, StackZeroBits, SizeOfStackCommit, SizeOfStackReserve, lpBytesBuffer nullptr вместо NULL передать
нихуя се, а в чём разница в поведении нуллптр и буквально нулевого интапроверил, даже так не работает, только теперь не ERROR_ACCESS_DENIED возвращает, а 0 и поток просто не создается
upd забыл в flags nullptr вместо нулл передать, все ок ща
Буквально нужно читать прежде чем щитпоститьнихуя се, а в чём разница в поведении нуллптр и буквально нулевого инта
std::unordered_map остался как будто бы из принципа; если ребилдить стл то ребилдить стл по черному мне кажется[+] - Удалены почти все включаемые заголовки, конкретный список:
<Windows.h>
<vector>
<cstdint>
<stdexcept>
возможно в будущей обнове поставлю вместо std::unordered_map свою реализацию простейшей мапыstd::unordered_map остался как будто бы из принципа; если ребилдить стл то ребилдить стл по черному мне кажется
возможно в будущей обнове поставлю вместо std::unordered_map свою реализацию простейшей мапы
template <typename key, typename _ty> class unordered_map
{
private:
struct value_t
{
key m_key;
_ty m_val;
};
value_t* m_map;
uint32_t m_size;
public:
__forceinline unordered_map()
{
m_map = nullptr;
m_size = 0;
}
__forceinline bool empty()
{
return m_size == 0;
}
__forceinline bool find(key search_key)
{
for (uint32_t i = 0; i < m_size; ++i)
{
if (m_map[i].m_key == search_key)
return true;
}
return false;
}
__forceinline _ty& operator[](key search_key)
{
if (empty())
{
m_map = reinterpret_cast<value_t*>(malloc(sizeof(value_t)));
++m_size;
m_map[0].m_key = search_key;
return m_map[0].m_val;
}
if (find(search_key))
{
for (uint32_t i = 0; i < m_size; ++i)
{
if (m_map[i].m_key == search_key)
return m_map[i].m_val;
}
}
m_map = reinterpret_cast<value_t*>(realloc(reinterpret_cast<uintptr_t>(m_map), sizeof(value_t) * ++m_size));
value_t new_entry{ search_key, _ty {} };
m_map[m_size - 1] = new_entry;
return m_map[m_size - 1].m_val;
}
__forceinline void shutdown()
{
free(m_map);
}
};
это вместо конструктора типа__forceinline unordered_map()
Так точноэто вместо конструктора типа
в чём профит?Так точно
Инит данных, а че?в чём профит?
а на кой черт везде пихать __forceinline, разве компилятор сам не оптимизирует?C++:template <typename key, typename _ty> class unordered_map { private: struct value_t { key m_key; _ty m_val; }; value_t* m_map; uint32_t m_size; public: __forceinline unordered_map() { m_map = nullptr; m_size = 0; } __forceinline bool empty() { return m_size == 0; } __forceinline bool find(key search_key) { for (uint32_t i = 0; i < m_size; ++i) { if (m_map[i].m_key == search_key) return true; } return false; } __forceinline _ty& operator[](key search_key) { if (empty()) { m_map = reinterpret_cast<value_t*>(malloc(sizeof(value_t))); ++m_size; m_map[0].m_key = search_key; return m_map[0].m_val; } if (find(search_key)) { for (uint32_t i = 0; i < m_size; ++i) { if (m_map[i].m_key == search_key) return m_map[i].m_val; } } m_map = reinterpret_cast<value_t*>(realloc(reinterpret_cast<uintptr_t>(m_map), sizeof(value_t) * ++m_size)); value_t new_entry{ search_key, _ty {} }; m_map[m_size - 1] = new_entry; return m_map[m_size - 1].m_val; } __forceinline void shutdown() { free(m_map); } };
Фетиш такойа на кой черт везде пихать __forceinline, разве компилятор сам не оптимизирует?
что-то странная у тебя реализация хэш таблицы)))C++:template <typename key, typename _ty> class unordered_map { private: struct value_t { key m_key; _ty m_val; }; value_t* m_map; uint32_t m_size; public: __forceinline unordered_map() { m_map = nullptr; m_size = 0; } __forceinline bool empty() { return m_size == 0; } __forceinline bool find(key search_key) { for (uint32_t i = 0; i < m_size; ++i) { if (m_map[i].m_key == search_key) return true; } return false; } __forceinline _ty& operator[](key search_key) { if (empty()) { m_map = reinterpret_cast<value_t*>(malloc(sizeof(value_t))); ++m_size; m_map[0].m_key = search_key; return m_map[0].m_val; } if (find(search_key)) { for (uint32_t i = 0; i < m_size; ++i) { if (m_map[i].m_key == search_key) return m_map[i].m_val; } } m_map = reinterpret_cast<value_t*>(realloc(reinterpret_cast<uintptr_t>(m_map), sizeof(value_t) * ++m_size)); value_t new_entry{ search_key, _ty {} }; m_map[m_size - 1] = new_entry; return m_map[m_size - 1].m_val; } __forceinline void shutdown() { free(m_map); } };
при конфликтах хешей будет именно что O(n)
потенциально делает работу для реверсера/декомпилятора труднее. других причин для абуза форсинлайна я не вижу.а на кой черт везде пихать __forceinline, разве компилятор сам не оптимизирует?
при конфликтах да. Но ты полностью в следующий раз сообщение читайпри конфликтах хешей будет именно что O(n)
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz